将列表列表(用逗号分隔的语句)展平为列表列表[重复]
Posted
技术标签:
【中文标题】将列表列表(用逗号分隔的语句)展平为列表列表[重复]【英文标题】:Flatten a list of lists (statements separated by a comma) into a list of lists [duplicate] 【发布时间】:2021-11-03 20:04:38 【问题描述】:我有一份声明清单。每个语句都有许多其他语句,用逗号分隔。
gf = ['citrus fruit,black bread,margarine,ready soups', 'tropical
fruit,yogurt,coffee, margarine', 'whole milk'] ## it has elements (lists with multiple items separated by EXTERNAL commas).
我需要把它转换成:
gf_n = ['citrus fruit', 'black bread', 'margarine', 'ready soups', 'tropical fruit', 'yogurt', 'coffee', 'margarine','whole milk']
可以重复单个元素(单词或一组单词)。将来,我需要计算每个元素的频率(例如“柑橘类水果”)和每个两项组合的频率(例如“黑面包”和“人造黄油”)
这是我的代码,结果不是我需要的:
gf_list = list(gf.split(","))
gf_item = []
gf_item = [item for sublist in gf_list for item in sublist]
这是我得到的令人惊讶的结果(字母 - 不是文字)
['c', 'i', 't', 'r', 'u', 's', ' ', 'f', 'r', 'u'] # first 10 elements
我做错了什么?
解决方案(经过一段时间我想出了这个):
for subl in lst:
gf_item.append(subl.split(","))
【问题讨论】:
请添加指定语言的标签。 解析并展平列表 (gf_n = sum((s.split(',') for s in gf), [])
),如果前导和尾随空格不应该保留,则需要修剪它们 ([s.strip() for s in gf_n]
)。
【参考方案1】:
gf_item = [i.strip() for i in gf for i in i.split(',')]
使用生成器-
def flatten(x):
if type(x) is str:
for i in x.split(','):
yield i.strip()
return
try:
for i in x:
yield from flatten(i)
except TypeError:
yield x
gf = ['citrus fruit,black bread,margarine,ready soups', 'tropical fruit,yogurt,coffee, margarine', 'whole milk']
gf_new = list(flatten(gf))
lst = [['alice', 'gun'], ['bob', 'tree', ' mot'],['cara']]
lst_new = list(flatten(lst))
print(gf_new)
print(lst_new)
输出:
['citrus fruit', 'black bread', 'margarine', 'ready soups', 'tropical fruit', 'yogurt', 'coffee', 'margarine', 'whole milk']
['alice', 'gun', 'bob', 'tree', 'mot', 'cara']
【讨论】:
这会产生不同的结果:['alice', 'gun', 'bob', 'tree', 'mot', 'cara']。我需要:[['alice', 'gun'], ['bob', 'tree', 'mot'], ['cara']]。我只是为了简洁而改变元素 你没有提到你的问题中可能有嵌套列表。请参阅您给出的示例包含一个平面字符串列表。 我已经编辑了答案。它现在可以工作了。【参考方案2】:试试这个:
gf1 = str(gf).replace("[",'').replace("]",'').replace("'",'')
gf_n = [x.strip() for x in gf1.split(',')]
返回:
['citrus fruit',
'black bread',
'margarine',
'ready soups',
'tropical fruit',
'yogurt',
'coffee',
'margarine',
'whole milk']
【讨论】:
以上是关于将列表列表(用逗号分隔的语句)展平为列表列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章