为什么我的列表没有被python覆盖?

时间:2019-03-16 00:56:44

标签: python list

List = ["I?", "Can", "!Not", "Do.", "It"]
l=[]
BadChars = ["?", "!", "."]
for i in List:
    for j in BadChars:
        if j in i:
            i=i.strip(j)
    l.append(i)
print(l)
print(List)

输出:

enter image description here

从输出中可以看到,即使写了i = i.strip(j),该列表也没有被覆盖。怎么了?提前致谢。我正在新学习python,所以这个问题可能很愚蠢。 当我在堆栈溢出中解决子列表中的更改字符时,我想到了这个问题。我的问题是“为什么List和l具有不同的值?”

2 个答案:

答案 0 :(得分:2)

要覆盖,请使用索引:

List = ["I?", "Can", "!Not", "Do.", "It"]
l=[]
BadChars = ["?", "!", "."]
for i in range(len(List)):
    for j in BadChars:
        if j in List[i]:
            List[i] = List[i].strip(j)
    l.append(List[i])
print(l)
print(List)

答案 1 :(得分:0)

您的列表没有被“覆盖”,原因有两个,第一个是strip返回一个新字符串。第二个问题是,当您执行i = i.strip(whatever)时,您不会覆盖i指向的值,而是指向i指向一个新值。因此,对i所指向的旧值的其他引用不会受到影响,因为您根本没有更改它。