我有以下串列:
lista = [1,2,3,5]
listb = [1,5,2,6]
listc = [3,5,1,6]
mainList = [lista,listb,listc]
我想從 mainList 中洗掉 listb,因為它在索引位置 [0] 處包含與 lista 相同的元素。
然而,有點像下面的代碼,適用于 mainList 中包含的每個串列。基本上,洗掉所有具有索引 0 重復性的串列,同時保留第一個串列。
if lista[0] == listb[0]:
mainList.remove(listb)
#But to include duplicity in for all elements in mainList.
有人嗎?提前致謝!
uj5u.com熱心網友回復:
這可以解決問題:
lista = [1,2,3,5]
listb = [1,5,2,6]
listc = [3,5,1,6]
listd = [1,7,9,4]
liste = [3,7,4,8]
mainList = [lista,listb,listc,listd,liste]
for o,i in enumerate([n for n,k in enumerate(mainList) if any([k[0]==j[0] for j in mainList[:n]])]):
del mainList[i-o]
print(mainList) # [[1, 2, 3, 5], [3, 5, 1, 6]]
或者,您可以使用單行串列理解創建一個新串列:
newList = [k for n,k in enumerate(mainList) if not any([k[0]==j[0] for j in mainList[:n]])]
快速的解決方案是這樣的:
firsts = set()
result = []
for k in mainList:
if not firsts.__contains__(k[0]):
result.append(k)
firsts.add(k[0])
print(result)
或這樣的地方:
firsts = set()
i=0
while i<len(mainList):
if not mainList[i][0] in firsts:
firsts.add(mainList[i][0])
i =1
else:
del mainList[i]
print(mainList)
uj5u.com熱心網友回復:
您可以使用下面的代碼 -
lista = [1,2,3,5]
listb = [1,5,2,6]
listc = [3,5,1,6]
mainList = [lista,listb,listc]
ml_final = mainList.copy() #make a copy of the main list, this would be the final list
first_ele = [] #make empty list where first elements of all the lists are added
for i in range(len(mainList)):
temp = mainList[i][0]
if temp in first_ele:
ml_final.pop(i)
else:
first_ele.append(temp)
#output
print(ml_list)
#[[1, 2, 3, 5], [3, 5, 1, 6]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435226.html
上一篇:奇怪的行為:用字典進行串列理解
下一篇:Scikit學習指標給出意外錯誤
