假设我们有一个字符串:
A = "John\t20\nChris\t30\nAby\t10\n"
我想使A
成为列表的列表,并且第一个元素仍然为str
,第二个元素转换为int
:
我所做的是:
A = [[lambda k,v: str(k), int(v) for k, v in s.split('\t')] for s in A.split('\n')]
有什么建议吗?
答案 0 :(得分:1)
您只需获取不带lambda
的值:
[[s.split('\t')[0], int(s.split('\t')[1])] for s in A.strip().split('\n')]
注意:添加strip()可以解析出尾随的'\ n'。
答案 1 :(得分:1)
我认为您过于复杂了。您根本不需要匿名函数。
首先,使用split
字符串,然后在结果列表中对两组进行迭代,然后将对中的第二个元素转换为int
。
第二部分,itertools
documentation有一个名为 grouper
的食谱。您可以复制粘贴该功能,也可以从more_itertools
(需要安装)中导入该功能。
>>> from more_itertools import grouper
>>>
>>> a = "John\t20\nChris\t30\nAby\t10\n"
>>> [(s, int(n)) for s, n in grouper(2, a.split())]
[('John', 20), ('Chris', 30), ('Aby', 10)]
最后,如果要展平结果,请应用itertools.chain
。
>>> list(chain.from_iterable((s, int(n)) for s, n in grouper(2, a.split())))
['John', 20, 'Chris', 30, 'Aby', 10]
答案 2 :(得分:0)
如果您想使用lambda,这是一种更简单的方法;
L = lambda s: [s.split('\t')[0], int(s.split('\t')[1])]
A3 = [L(x) for x in A.strip().split('\n')]