我想从第三个字符到字符串末尾获得一个新字符串,例如myString[2:end]。如果省略第二部分意味着“到结尾”,如果省略第一部分,它是否从头开始?


当前回答

嗯,我遇到了一个需要将PHP脚本转换为Python的情况,它有许多substr(字符串、开头、长度)的用法。如果我选择Python的字符串[开始:结束],我必须计算很多结束索引,所以更简单的方法是使用字符串[开始][:长度],这为我省去了很多麻烦。

其他回答

a="Helloo"
print(a[:-1])

在上面的代码中,[:-1]声明从开始打印到最大限制-1。

输出:

>>> Hello

注意:这里a[:-1]也与a[0:-1]和a[0:len(a)-1]相同

a="I Am Siva"
print(a[2:])

输出:

>>> Am Siva

在上面的代码中,[2:]声明从索引2打印到最后一个元素。

请记住,如果您将打印字符串的最大限制设置为(x),那么它将打印字符串直到(x-1),并且还请记住列表或字符串的索引将始终从0开始。

也许我错过了,但我在这页上找不到原始问题的完整答案,因为这里没有进一步讨论变量。所以我不得不继续寻找。

既然我还不能发表评论,让我在这里补充我的结论。我确信在访问此页面时,我不是唯一对此感兴趣的人:

 >>>myString = 'Hello World'
 >>>end = 5

 >>>myString[2:end]
 'llo'

如果你离开第一部分,你会得到

 >>>myString[:end]
 'Hello' 

如果将:放在中间,则会得到最简单的子字符串,即第5个字符(计数以0开头,因此在本例中为空):

 >>>myString[end]
 ' '

使用硬编码索引本身可能会一团糟。

为了避免这种情况,Python提供了一个内置的对象slice()。

string = "my company has 1000$ on profit, but I lost 500$ gambling."

如果我们想知道我还剩多少钱。

正常溶液:

final = int(string[15:19]) - int(string[43:46])
print(final)
>>>500

使用切片:

EARNINGS = slice(15, 19)
LOSSES = slice(43, 46)
final = int(string[EARNINGS]) - int(string[LOSSES])
print(final)
>>>500

使用切片可以获得可读性。

有没有一种方法可以在Python中对字符串进行子串,以获得从第三个字符到字符串末尾的新字符串?也许像myString[2:end]?

是的,如果您将名称end赋值或绑定到常量singleton None,这实际上是有效的:

>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'

切片表示法有3个重要参数:

开始停止步

未给定时,它们的默认值为None,但我们可以显式传递它们:

>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'

如果离开第二部分意味着“直到结束”,如果你离开第一部分,它是否从头开始?

是的,例如:

>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'

请注意,我们在切片中包括start,但我们只包括stop,而不包括stop。

当步长为“无”时,默认情况下,切片使用1作为步长。如果您使用负整数,Python就足够聪明,可以从头到尾。

>>> myString[::-1]
'0987654321'

我在解释切片表示法问题的答案中详细解释了切片表示法。

这里似乎缺少一个示例:完整(浅)拷贝。

>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>>

这是创建序列类型副本(而不是内部字符串)[:]的常见习惯用法。Shallow复制一个列表,请参阅Python列表切片语法,无明显原因。