簡體   English   中英

“for each in list”和“for each in list[0:]”有什么區別

[英]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是一個listvalid[:] (或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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM