簡體   English   中英

將列表的每個項目與其余項目進行比較,並在迭代時從列表中刪除匹配的元素

[英]compare each items of a list with the rest and remove matched elements from the list while iterating

我的輸入數據是

[[1, 2], [3, 4], [5, 6], [1, 2, 7], [8, 2], [9, 5]]

我的預期輸出是:

[[1, 2], [1, 2, 7], [8, 2], [3, 4], [5, 6], [9, 5]]

借助如何將列表中的每個項目與其余項目進行比較,僅一次? 目前我的片段看起來像

mylist = [[1, 2], [3, 4], [5, 6], [1, 2, 7], [8, 2], [9, 5]]
result = list()

for i in range(len(mylist)):
    result.append(mylist[i])
    for j in range(i + 1, len(mylist)):
        if set(mylist[i]) & set(mylist[j]):
            result.append(mylist[j])
            mylist.remove(mylist[j])

print(result)

但是,它拋出錯誤IndexError: list index out of range 我想這是因為我試圖在迭代時從列表中刪除項目。

所以我檢查了如何在迭代時從列表中刪除項目? . 它建議使用 slice 或 itertools。 它還提供了一個代碼片段,我發現它更具可讀性。

temp = []
while somelist:
    x = somelist.pop()
    if not determine(x):
        temp.append(x)
while temp:
    somelist.append(templist.pop())

但是,我無法弄清楚它是如何工作的。 任何的想法?

更新 1

片段:

mylist = [[1, 2], [3, 4], [5, 6], [1, 2, 7], [8, 2], [9, 5]]
result = list()

for i in range(len(mylist)):
    result.append(mylist[i])
    for j in range(i + 1, len(mylist)):
        if set(mylist[i]) & set(mylist[j]):
            result.append(mylist[j])
            # mylist.remove(mylist[j])

print(result)

輸出:

[[1, 2], [1, 2, 7], [8, 2], [3, 4], [5, 6], [9, 5], [1, 2, 7], [8, 2], [8, 2], [9, 5]]

我不想要結果中的[1, 2, 7], [8, 2], [8, 2], [9, 5]所以我嘗試使用mylist.remove(mylist[j]) ,我可以想不通怎么辦。

好的......所以從你的問題來看,我知道你想從result刪除重復的值。 我嘗試使用list.remove完成此任務,但我不能。 所以我以不同的方式做到了。 不要使用list.remove ,而是將這些行添加到您的代碼中:

import copy
curr_lst = []

resultdup = copy.deepcopy(result)

for x in range(len(resultdup)):
    curr_lst = resultdup[x]
    for y in range(x+1,len(resultdup)):
        if curr_lst == resultdup[y]:
            indices = [i for i, x in enumerate(result) if x == curr_lst]
            for x in indices[1:]:
                del result[x]

print(result)

輸出:

[[1, 2], [1, 2, 7], [8, 2], [3, 4], [5, 6], [9, 5]]

希望這對你有幫助。

OP在這里,我找不到我最初提出的問題的答案。 但是,我找到了一種替代方法(盡管它可能不如從mylist[j]刪除元素那樣最佳)來實現我期望的結果。

我目前使用的代碼是:

mylist = [[1, 2], [3, 4], [5, 6], [1, 2, 7], [8, 2], [9, 5]]
temp_result = list()

for i in range(len(mylist)):
    temp_result.append(mylist[i])
    for j in range(i + 1, len(mylist)):
        if (set(mylist[i]) & set(mylist[j])):
            temp_result.append(mylist[j])

result = []
for elem in temp_result:
    if elem not in result:
        result.append(elem)

print(result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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