给出这样的字符串:
data ="\n
random stuff\n
a,1\n
b,2\n
c,3\n
...
"
我想仅使用带逗号的行从此字符串创建列表。我知道我可以使用以下代码创建一个列表:
l = [line for line in csv.reader(data.split('\n'))]
这会给我[[],['some stuff'],['a',1] ...]
但我真正想要的是这样的:
#this code is wrong
l = [line if len(line)>1 for line in csv.reader(data.split('\n')]
获取如下列表:[['a',1],['b',2]...]
我主要是寻找最短的解决方案,因为我知道如何以艰难的方式去做(通过迭代列表[[],['some stuff'],['a',1]...]
并从中删除元素)。
谢谢,
答案 0 :(得分:2)
你走了:
[line for line in csv.reader(data.split('\n')) if len(line) > 1]
这正是您的逻辑,只需输入正确的语法,最后使用if
。这将为您提供所需的结果:
>>> data ="\n random stuff\na,1\nb,2\nc,3\n ... "
>>> [line for line in csv.reader(data.split('\n')) if len(line) > 1]
[['a', '1'], ['b', '2'], ['c', '3']]
<强>更新强>
如果你真的想要将数组中的第二个元素解析为整数,你可以像这样写:
>>> [[x[0], int(x[1])] for x in csv.reader(data.split('\n')) if len(x) > 1]
[['a', 1], ['b', 2], ['c', 3]]
答案 1 :(得分:1)
这应该可以解决问题:
>>> data ="\n random stuff\n a,1\n b,2\n c,3\n ... "
>>> [line.split(',') for line in data.split('\n') if ',' in line]
[[' a', '1'], [' b', '2'], [' c', '3']]
基本上,你在\n
上拆分,忽略没有逗号if
条件的每一行,然后用找到的逗号分割每个结果。
答案 2 :(得分:1)
目前的答案是不必要地测试len(line)
,或者不必要地测试',' in line
。
这是最短的解决方案:
[line for line in csv.reader(data.split("\n")) if line]
虽然如果你只想要包含多个元素的元素,',' in line
是一个不错的方法。