![](/img/trans.png)
[英]In Python, what's the difference between deepcopy and [each[:] for each in List]
[英]What is the difference between "for each in list" and "for each in list[0:]"
這是我的代碼塊。 “valid”是一個數值列表,如果正則表達式確實找到了匹配項,這個片段應該刪除被測元素。 問題是,根據我是否運行“For each in valid”和“for each in valid[0:]”,我得到了不同的結果。 我不明白為什么這兩個會表現不同。
regexDupes = re.compile(r'(.)\1+')
for each in valid[0:]: ####<<<<<<<PROBLEM IS HERE
qtyTest = regexDupes.findall(str(each))
if len(qtyTest) == 0:
valid.remove(each)
print(each)
invalid.append(each)
print(len(valid), len(invalid))
print(valid[0:25])
您不得遍歷要修改的列表。 因此,您必須制作列表的副本,或者更好的是,不要修改列表,而是生成新列表:
regexDupes = re.compile(r'(.)\1+')
modified_valid = []
for each in valid:
qtyTest = regexDupes.findall(str(each))
if len(qtyTest) == 0:
print(each)
invalid.append(each)
else:
modified_valid.append(each)
print(len(modified_valid), len(invalid))
print(modified_valid[0:25])
如果valid
是一個list
則valid[:]
(或valid[0:]
是該列表的副本。
當您在循環期間改變列表時,需要迭代列表的副本。 例如,當您添加或刪除元素時。
如果不使用副本,迭代器可能會丟失並丟失一些元素。
如果你想做出歧視,你可以寫:
invalid = list(filter(lambda i: not regexDupes.findall(str(i)), valid))
valid = list(filter(lambda i: regexDupes.findall(str(i)), valid))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.