如何遍历 Python List 及其 List 元素,在每个元素内拆分字符串并写出一个新列表

我有一个包含数百个元素的列表,其中许多元素本身就是一个列表。我希望“展平”并删除列表中的重复数据并将其写到文件中。应写入展平列表的离散元素在源数据中由双反斜杠“\”分隔。例如,给定以下列表:


alist = ["ZZ Ward\\Eric Bell"],["ZZ Ward"],["Sabine Kabongo\\Salif Keita\\Cat Stevens\\Trilok Gurtu\\Lindsey Buckingham"], ["John Mellencamp\\Cat Stevens"]

我希望创建一个包含以下内容的新列表:


ZZ Ward

Eric Bell

Sabine Kabongo

Salif Keita

Cat Stevens

Trilok Gurtu

Lindsey Buckingham

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

虽然重复数据删除应该相对简单,但我如何将这个单独的条目转换为一个没有元素本身的列表?


慕神8447489
浏览 193回答 3
3回答

忽然笑

首先,用于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("\\"))

慕慕森

您可以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',&nbsp;'Eric Bell',&nbsp;'John Mellencamp',&nbsp;'Lindsey Buckingham',&nbsp;'Sabine Kabongo',&nbsp;'Salif Keita',&nbsp;'Trilok Gurtu',&nbsp;'ZZ Ward'}在传统版本中,这可以像这样完成:new_list = []for l1 in alist:&nbsp; &nbsp; for l2 in l1:&nbsp; &nbsp; &nbsp; &nbsp; for l3 in l2.split('\\'):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if l3 not in new_list:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new_list.append(l3)print(new_list)输出:['ZZ Ward', 'Eric Bell', 'Sabine Kabongo', 'Salif Keita', 'Cat Stevens', 'Trilok Gurtu', 'Lindsey Buckingham', 'John Mellencamp']

泛舟湖上清波郎朗

列表理解是执行此操作的最佳方法,但如果您继续沿着您开始的路径前进,我认为这将解决问题。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:&nbsp; for element in list:&nbsp; &nbsp; &nbsp; for item in element.split("\\"):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(type(item), item)&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python