在python中展平嵌套字符串列表

Posted

技术标签:

【中文标题】在python中展平嵌套字符串列表【英文标题】:Flattening nested string list in python 【发布时间】:2014-02-16 00:45:20 【问题描述】:

我有两个列表,一个不是嵌套的,另一个是嵌套的。

carNames = []
priceAndMileage = []

数据看起来像这样,组合起来:

[(u'2011 Toyota Camry SE V6', [u'$14,995', u'31,750']), (u'2012 Toyota Camry L', [u'$15,993', u'27,381'])]

我的代码是:

combinedData = zip(carNames, priceAndMileage)

writer = csv.writer(open("dict.csv", 'r+'))

for dataList in combinedData:
    dataList = [dataList[0]] + [y for x in dataList[1] for y in x]
    writer.writerow(dataList)

我扁平化了 dataList,但是它迭代了每个字符,而不仅仅是项目。我怎样才能产生结果,例如展平任务不会展平每个字符,而只是展平项目子列表?

我的结果在 csv 文件中:

2011 Toyota Camry SE V6,$,1,4,",",9,9,5,3,1,",",7,5,0
2012 Toyota Camry L,$,1,5,",",9,9,3,2,7,",",3,8,1

但我需要:

2011 Toyota Camry SE V6, $14,995, 31,750
2012 Toyota Camry L, $15,993, 27,381

【问题讨论】:

【参考方案1】:

要扁平化dataList,您可以连接[dataList[0]]dataList[1]

   for dataList in combinedData:
        dataList = [dataList[0]] + dataList[1]
        writer.writerow(dataList)

说明

dataList 是,例如,(u'2011 Toyota Camry SE V6', [u'$14,995', u'31,750']) (顺便说一句,dataList 不是list,它是tuple - 基本上是一个不可变的列表版本)

我们想要得到的是一个扁平化的dataList,即[u'2011 Toyota Camry SE V6', u'$14,995', u'31,750']

[dataList[0]] 是一个只有一个元素的列表:[u'2011 Toyota Camry SE V6']

dataList[1] 是一个包含两个元素的列表:[u'$14,995', u'31,750']

[dataList[0]] + dataList[1] 将连接这两个列表,我们将得到扁平化的dataList

【讨论】:

@ChristopherWallace 在您的列表理解中,您实际上有一个双 for 循环,因此您遍历列表以获取两个字符串,然后遍历两个字符串中的每一个并获取它们的每个字符。

以上是关于在python中展平嵌套字符串列表的主要内容,如果未能解决你的问题,请参考以下文章

pythonic方法来展平嵌套列表? [复制]

Python:使用索引展平嵌套列表

在Python中展平一个浅表[重复]

Python:展平多个嵌套的字典并追加

在 Erlang 中展平嵌套列表的列表

以独特的方式展平包含嵌套字典的列表的数据框列