亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何遍歷 Python List 及其 List 元素,在每個元素內拆分字符串并寫出一個新列表

如何遍歷 Python List 及其 List 元素,在每個元素內拆分字符串并寫出一個新列表

慕神8447489 2023-03-30 10:14:23
我有一個包含數百個元素的列表,其中許多元素本身就是一個列表。我希望“展平”并刪除列表中的重復數據并將其寫到文件中。應寫入展平列表的離散元素在源數據中由雙反斜杠“\”分隔。例如,給定以下列表:alist = ["ZZ Ward\\Eric Bell"],["ZZ Ward"],["Sabine Kabongo\\Salif Keita\\Cat Stevens\\Trilok Gurtu\\Lindsey Buckingham"], ["John Mellencamp\\Cat Stevens"]我希望創建一個包含以下內容的新列表:ZZ WardEric BellSabine KabongoSalif KeitaCat StevensTrilok GurtuLindsey BuckinghamJohn Mellencamp作為 Python 的新手,我進行了大量搜索并嘗試了各種方法,但還沒有完全找到正確的解決方案。使用以下代碼: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:  print(type(element), element.split("\\"))我已經設法做到這一點:<class 'str'> ['John Mellencamp', 'Cat Stevens']<class 'str'> ['Sabine Kabongo', 'Salif Keita', 'Cat Stevens', 'Trilok Gurtu', 'Lindsey Buckingham']<class 'str'> ['ZZ Ward']<class 'str'> ['ZZ Ward', 'Eric Bell']雖然重復數據刪除應該相對簡單,但我如何將這個單獨的條目轉換為一個沒有元素本身的列表?
查看完整描述

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("\\"))


查看完整回答
反對 回復 2023-03-30
?
慕慕森

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']



查看完整回答
反對 回復 2023-03-30
?
泛舟湖上清波郎朗

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) 


查看完整回答
反對 回復 2023-03-30
  • 3 回答
  • 0 關注
  • 238 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號