[英]Python check if an item is in a nested list at a certain index
我生成了一個唯一對嵌套列表,其中每個項目都成對存在。
my_list = [['item1', 'item2'],
['item3', 'item4'],
['item5', 'item6'],
['item7', 'item8'],
['item1', 'item9'],
['item3', 'item10'],
['item5', 'item11'],
['item7', 'item12'],
['item13', 'item2'],
['item14', 'item4'],
['item15', 'item6'],
['item16', 'item8'],
['item13', 'item9'],
['item14', 'item10'],
['item15', 'item11'],
['item16', 'item12']]
但是要求是每個項目在每個索引處只需要存在一次。 因此,例如item1應該一次出現在子列表的索引0處,而第二次出現在子列表的索引1中成對出現,反之亦然。
我嘗試使用帶條件的any()來檢查該項目是否在嵌套列表中存在,但無法弄清楚如何檢查它是否已經存在於子列表的索引中,在這種情況下,我將反轉嵌套列表。
for pair in my_list:
if any(item in sublist for sublist in my_list):
pair.reverse()
我假設如果該列表中的第一項或最后一項存在,則您不想輸出該列表。 我只是將每個索引添加到2個不同的列表中,看它是否存在並創建輸出。 必須有一個更好的pythonic解決方案。
new0=[]
new1=[]
for i in my_list:
if i[0] not in new0 and i[1] not in new1:
print(i)
new0.append(i[0])
new1.append(i[1])
問題在於您沒有任何“已經”列表可供參考。 您需要隨時進行構建。 這是一個非常簡單的示例解決方案:
# Keep separate lists for each position.
good_list_0 = []
good_list_1 = []
for pair in my_list:
# If either element already exists at that index ...
if pair[0] in good_list_0 or \
pair[1] in good_list_1:
# ... reverse the pair
a, b = pair[1], pair[0]
else:
a, b = pair
# add the values to the appropriate index lists
good_list_0.append(a)
good_list_1.append(b)
# Zip the two lists back together.
good_list = list(zip(good_list_0, good_list_1))
for pair in good_list:
print(pair)
輸出:
('item1', 'item2')
('item3', 'item4')
('item5', 'item6')
('item7', 'item8')
('item9', 'item1')
('item10', 'item3')
('item11', 'item5')
('item12', 'item7')
('item2', 'item13')
('item4', 'item14')
('item6', 'item15')
('item8', 'item16')
('item13', 'item9')
('item14', 'item10')
('item15', 'item11')
('item16', 'item12')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.