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)
输出:
从输出中可以看到,即使写了i = i.strip(j),该列表也没有被覆盖。怎么了?提前致谢。我正在新学习python,所以这个问题可能很愚蠢。 当我在堆栈溢出中解决子列表中的更改字符时,我想到了这个问题。我的问题是“为什么List和l具有不同的值?”
答案 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
所指向的旧值的其他引用不会受到影响,因为您根本没有更改它。