有没有一种方法可以在Python中对一个字符串进行子串,以获得一个从第三个字符到字符串结尾的新字符串?
也许像 "myString[2:end]"那样?
如果留下第二部分意味着'直到结束',而如果留下第一部分,是否从头开始?
Substr()正常情况下(即在 PHP和Perl)都是这样工作的。
s = Substr(s, beginning, LENGTH)
所以参数是beginning
和LENGTH
。
但是Python'的行为是不同的。 它期望 begin 和 end (!)后面有一个。 **所以 Substr(s, beginning, LENGTH) 的正确替换是
s = s[ beginning : beginning + LENGTH]
一个常见的方法是通过字符串切片来实现。
MyString[a:b]
给出了一个从索引a到(b - 1)的子串。
这里似乎缺少一个例子:全面(浅)复制。
>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>>
这是创建序列类型 (不是内部字符串) [:]
的常见习语。浅层拷贝一个列表,见 Python 列表切片语法无明显原因使用。
有没有办法在Python中对一个字符串进行子串,从第3个字符到字符串的末尾得到一个新的字符串?
myString[2:end]
? 也许像myString[2:end]
这样?
是的,如果你把名字end
分配给常量单子None
,或者[绑定][1],这实际上是可行的。
>>> 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'
请注意,我们在切片中包括了起始点,但我们只到停止点,而不包括停止点。
当 step 为 "None "时,默认情况下,分片使用 1
作为步长。
如果你用负整数进行步进,Python 会很聪明地从终点到起点。
>>> myString[::-1]
'0987654321'
我在[我对解释分片符号问题的回答][2]中详细解释了分片符号。
[1]: https://docs.python.org/reference/simple_stmts.html#assignment-statements [2]: https://stackoverflow.com/a/24713353/541136
我想对讨论补充两点。
None
代替在空处指定"从开始"。
或"到结束"。'abcde'[2:None] == 'abcde'[2:] == 'cde'。
这在函数中特别有用,因为在函数中你不能提供一个空的空间作为参数。
def substring(s, start, end):
"""从开头和结尾删除start
字符。
字符串s
末尾的字符。
例子
>。 子串('abcde', 0, 3) 'abc'。 >。 子串('abcde', 1, None) 'bcde'。 """。 返回s[start:end]
idx = slice(2, None) 'abcde'[idx] == 'abcde'[2:]== 'cde'。
也许我错过了,但我在这个页面上找不到原来问题的完整答案,因为这里没有进一步讨论变量。 所以我只好继续搜索。
由于我'还不能评论,所以让我在这里补充一下我的结论。 我'确信我不是唯一一个在访问这个页面时对它感兴趣的人。
>>>myString = 'Hello World'
>>>end = 5
>>>myString[2:end]
'llo'
如果你离开第一部分,你会得到
>>>myString[:end]
'Hello'
如果你把中间的.也留下,你就会得到最简单的子串,也就是第5个字符(计数从0开始,所以本例中是空白): 在中间,你会得到最简单的子串,也就是第5个字符(计数从0开始,所以在这种情况下是空白)。
>>>myString[end]
' '
如果myString包含一个从偏移量6开始的账号,长度为9,那么你可以这样提取账号。
acct = myString[6:][:9]
.
如果上位机接受这个方法,他们可能会想尝试一下,以实验的方式。
myString[2:][:999999]
它的工作原理是--没有出现错误,也没有发生默认的'字符串填充&39。 发生。
使用硬编码索引本身就会很乱。
为了避免这种情况,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
使用切片,你可以获得可读性。