3 回答

TA貢獻1806條經驗 獲得超5個贊
首先,用于sum展平您的列表。
>>> sum(alist, [])
['ZZ Ward\\Eric Bell', 'ZZ Ward', 'Sabine Kabongo\\Salif Keita\\Cat Stevens\\Trilok Gurtu\\Lindsey Buckingham', 'John Mellencamp\\Cat Stevens']
然后您可以將所有列表條目連接成一個具有相同分隔符的字符串:
>>> "\\".join(sum(alist, []))
'ZZ Ward\\Eric Bell\\ZZ Ward\\Sabine Kabongo\\Salif Keita\\Cat Stevens\\Trilok Gurtu\\Lindsey Buckingham\\John Mellencamp\\Cat Stevens'
之后,您可以使用定界符拆分它們:
>>> "\\".join(sum(alist, [])).split("\\")
['ZZ Ward', 'Eric Bell', 'ZZ Ward', 'Sabine Kabongo', 'Salif Keita', 'Cat Stevens', 'Trilok Gurtu', 'Lindsey Buckingham', 'John Mellencamp', 'Cat Stevens']
現在一旦你有了它,你就可以使用 set 構造函數刪除重復項,如上一個答案中所建議的那樣:
>>> set("\\".join(sum(alist, [])).split("\\"))
{'Trilok Gurtu', 'Sabine Kabongo', 'Lindsey Buckingham', 'Salif Keita', 'ZZ Ward', 'Eric Bell', 'Cat Stevens', 'John Mellencamp'}
所以你看到你想要的所有操作都可以在一行中完成!
newlist = set("\\".join(sum(alist, [])).split("\\"))

TA貢獻1856條經驗 獲得超17個贊
您可以list comprehension嘗試set:
>>> new_list = [l3 for l1 in alist for l2 in l1 for l3 in l2.split('\\')]
>>> new_list
['ZZ Ward', 'Eric Bell', 'ZZ Ward', 'Sabine Kabongo', 'Salif Keita', 'Cat Stevens', 'Trilok Gurtu', 'Lindsey Buckingham', 'John Mellencamp', 'Cat Stevens']
>>> list(set(new_list))
['ZZ Ward', 'Salif Keita', 'Eric Bell', 'Lindsey Buckingham', 'Trilok Gurtu', 'Sabine Kabongo', 'John Mellencamp', 'Cat Stevens']
# If maintaining order is necessary:
>>> sorted(set(new_list), key=new_list.index)
['ZZ Ward', 'Eric Bell', 'Sabine Kabongo', 'Salif Keita', 'Cat Stevens', 'Trilok Gurtu', 'Lindsey Buckingham', 'John Mellencamp']
FWIW 基本上set comprehension可以,如果不需要訂單:
>>> {l3 for l1 in alist for l2 in l1 for l3 in l2.split('\\')}
{'Cat Stevens',
'Eric Bell',
'John Mellencamp',
'Lindsey Buckingham',
'Sabine Kabongo',
'Salif Keita',
'Trilok Gurtu',
'ZZ Ward'}
在傳統版本中,這可以像這樣完成:
new_list = []
for l1 in alist:
for l2 in l1:
for l3 in l2.split('\\'):
if l3 not in new_list:
new_list.append(l3)
print(new_list)
輸出:
['ZZ Ward', 'Eric Bell', 'Sabine Kabongo', 'Salif Keita', 'Cat Stevens', 'Trilok Gurtu', 'Lindsey Buckingham', 'John Mellencamp']

TA貢獻1818條經驗 獲得超3個贊
列表理解是執行此操作的最佳方法,但如果您繼續沿著您開始的路徑前進,我認為這將解決問題。
alist = ["ZZ Ward\\Eric Bell"],["ZZ Ward"],["Sabine Kabongo\\Salif Keita\\Cat Stevens\\Trilok Gurtu\\Lindsey Buckingham"], ["John Mellencamp\\Cat Stevens"]
alist = list(filter(None, alist))
alist.sort()
for list in alist:
for element in list:
for item in element.split("\\"):
print(type(item), item)
添加回答
舉報