如何将嵌套列表转换为包含python中的字符串的列表?

时间:2017-04-19 03:12:33

标签: python

我正在尝试阅读csv文件:

SigGenelist = []
Sig = csv.reader(open('Genelist.csv'))
for row in Sig:
    SigGenelist.append(row)
print (SigGenelist)
打印输出就像:

[['x'], ['0610010K14Rik'], ['0610011F06Rik'], ['1110032F04Rik'], ['1110034G24Rik'], ...

所以我有一个嵌套列表,但我希望有一个列表,每个元素都是字符串,如:

['x', '0610010K14Rik', '0610011F06Rik', '1110032F04Rik', '1110034G24Rik', ...

我尝试将元素转换为字符串,如:

SigGenelist = []
Sig = csv.reader(open('Genelist.csv'))
for row in Sig:
    row = str(row) # try to change row into string instead of list
    SigGenelist.append(row)
print (SigGenelist)

但没有得到我想要的......

["['x']", "['0610010K14Rik']", "['0610011F06Rik']", "['1110032F04Rik']","['1110034G24Rik']"...

有什么建议吗?

5 个答案:

答案 0 :(得分:2)

而不是append尝试使用+运算符,更改行

...
SigGenelist.append(row)
...

使用+=

...
SigGenelist += row
...

Append用于向列表中添加单个元素,而+ =和extend用于将右侧的列表复制到左侧。而且由于额外的函数调用扩展更加昂贵(不重要,差异非常小),+ =在您的情况下是一个好方法。

答案 1 :(得分:1)

试试这个:

my_list = [[1], [2], [3], [4], [5], [6]]
print [item for sublist in my_list for item in sublist]

这是一个列表理解,它将列表列表压缩成一个列表。

或者,也许更简单的选项不会附加,而是将行添加到列表中。

SigGenelist = []
Sig = csv.reader(open('Genelist.csv'))
for row in Sig:
    SigGenelist += row
print (SigGenelist)

.append会将整个列表添加到列表的末尾,从而生成嵌套列表。 +=将只连接列表,使其成为深度1的列表!

答案 2 :(得分:1)

改变这个:

SigGenelist.append(row)

对此:

SigGenelist.extend(row)

答案 3 :(得分:1)

这可能是惯用的:

from itertools import chain
csv_reader = csv.reader(open('Genelist.csv'))
SigGeneList = list(chain.from_iterable(csv_reader))

答案 4 :(得分:0)

使用sum内置函数,因为csv.reader返回一个生成器,以下代码将完成这项工作:

Sig = csv.reader(open('Genelist.csv'))
SigGenelist = sum(Sig, [])