有没有办法在Python中对字符串进行子串,以获取从第3个字符到字符串末尾的新字符串?
也许喜欢myString[2:end]?
如果离开第二部分意味着'直到结束',如果你离开第一部分,它是从一开始就开始的吗?
我来过这个问题.码:
>>> values = [0, 1, 2]
>>> values[1] = values
>>> values
[0, [...], 2]
Run Code Online (Sandbox Code Playgroud)
我期望的结果是:
[0, [0, 1, 2], 2]
Run Code Online (Sandbox Code Playgroud)
这是python列表的无限分配吗?幕后的是什么?
谢谢.
作为来自C++背景的Python新手,Python(3.4.x)中的切片运算符对我来说看起来很荒谬.我只是没有得到"特殊规则"背后的设计理念.让我解释为什么我说它是"特殊的".
一方面,根据此处的Stack Overflow答案,切片运算符创建列表或列表的一部分(深度)副本,即新列表.链接可能是旧的(早于python 3.4.x),但我刚用python 3.4.2进行了以下简单实验确认了这种行为:
words = ['cat', 'window', 'defenestrate']
newList = words[:] # new objects are created; a.k.a. deep copy
newList[0] = 'dog'
print(words) # ['cat' ...
print(newList) # ['dog' ...
Run Code Online (Sandbox Code Playgroud)
另一方面,根据这里的官方文件:
Assignment to slices is also possible, and this can even change the size of the list or clear it entirely:
>>>
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> …Run Code Online (Sandbox Code Playgroud) 我在程序中使用列表,但我不理解以下行为.我已经开始理解可变性以及它如何影响变量赋值,但我没有看到这里的问题:
class Test:
def __init__(self, list_n):
list_a = list_n[:]
list_b = list_n[:]
print(list_a is list_b) # Prints False
print(list_a is list_n) # Prints False
print(list_b is list_n) # Prints False
list_a[0][0] = 1
print(list_a) # Both of these print [[1,0,0][0,0,0][0,0,0]]
print(list_b)
def main():
list_n = [[0,0,0],[0,0,0],[0,0,0]]
test = Test(list_n)
if __name__ == '__main__': main()
Run Code Online (Sandbox Code Playgroud)
双方list_a并list_b似乎仍指向同一个列表,即使我想我采取了必要的措施,以防止这种情况发生.