如何在Python中获取字符串的前两个字母?

51

假设我有一个字符串

str1 = "TN 81 NZ 0025" 
two = first2(str1)
print(two)  # -> TN

如何获取此字符串的前两个字母?我需要使用first2函数。


1
在这种情况下,str1.split()[0] 也可以使用,并且如果您还需要其他字段,则可能更有意义。 - U2EF1
@U2EF1, 不是的, str[0] 给出了字符串中的第一个字符,你需要 str[:2] ,并且还需要使用 split。 - alvas
@alvas str1.split()[0]str1[0] 是两段非常不同的代码。 - U2EF1
1
但它执行相同的操作并实现单个元素。然后您需要将它们连接起来。如果没有双空格,则 "".join(str1.split()[:2]) 是多余的,而 str[:2] 则可以实现相同的效果。 - alvas
@alvas 是谁说的 str1.split()[:2]?U2EFI 说的是 str1.split()[0] - wjandrea
7个回答

103

这就像是简单的string[:2]一样。如果需要,可以轻松编写一个函数来完成它。

即使这样,也和简单无异。

def first2(s):
    return s[:2]

6
这是正确获取前两个字符的方法。你对提问者的回答恰到好处,值得点赞。然而,我不会使用一个函数来实现这个目的。我更喜欢在代码中明确指定,而无需追溯函数以进行验证。例如,在主要代码中内联使用somestring [:2]来获取前两个字符。 - SDsolar
1
我同意,事实上我写道:“如果需要,可以轻松编写一个函数来完成它。”拥有像first2first3first4这样的大量函数是没有意义的。 - ShinTakezou

15

6
t = "your string"

使用以下方法操作一个字符串的前N个字符:

def firstN(s, n=2):
    return s[:n]

默认情况下等同于

t[:2]

4
这是这个简单函数的样子:
def firstTwo(string):
    return string[:2]

4

在Python中,字符串是字符列表,但它们不是显式的列表类型,而只是类似于列表的(即,可以像列表一样处理)。更正式地说,它们被称为序列(请参见http://docs.python.org/2/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange):

>>> a = 'foo bar'
>>> isinstance(a, list)
False
>>> isinstance(a, str)
True

由于字符串是序列,您可以使用 切片 来访问列表的部分,标记为 list [start_index:end_index] ,请参见 解释Python的切片表示法。例如:

>>> a = [1,2,3,4]
>>> a[0]
1 # first element, NOT a sequence.
>>> a[0:1]
[1] # a slice from first to second, a list, i.e. a sequence.
>>> a[0:2]
[1, 2]
>>> a[:2]
[1, 2]

>>> x = "foo bar"
>>> x[0:2]
'fo'
>>> x[:2]
'fo'

当未定义时,切片符号将开始位置设置为0,结束位置设置为序列长度。

在早期的C语言中,它是一个字符数组,动态与静态列表的问题现在看起来像传说一样,参见Python List vs. Array - when to use?


1
所有以前的例子如果你的字符串不够长,都会引发异常。
另一种方法是使用'yourstring'.ljust(100)[:100].strip()
这将给你前100个字符。如果你的字符串的最后几个字符是空格,你可能会得到一个较短的字符串。

3
不正确:例如,''[:2] 只会返回 '',不会有异常抛出。 - djvg

0
为了完整起见:您可以给一个lambda函数命名,而不是使用def:
first2 = lambda s: s[:2]

命名的lambda表达式是不好的编程实践。应该使用def代替。 - wjandrea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接