我正在尝试阅读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']"...
有什么建议吗?
答案 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, [])