Python列表及其拆分

ale*_*sel 4 python list

例如,我有这样的代码

a = ["a;b", "c;d",...,"y;z"]
Run Code Online (Sandbox Code Playgroud)

我想将每个列表元素拆分为同一列表中的项目.所以我想得到这样的东西:

["a", "b", "c", "d", ...., "y", "z"]
Run Code Online (Sandbox Code Playgroud)

我该怎么办?谢谢你的回答.

Sha*_*hin 9

仅使用字符串操作似乎是最简单的(当然这是主观的)和最快的(与迄今为止发布的其他解决方案相比,差距很大).

>>> a = ["a;b", "c;d", "y;z"]
>>> ";".join(a).split(";")
['a', 'b', 'c', 'd', 'y', 'z']
Run Code Online (Sandbox Code Playgroud)

证明/基准

按经过时间的升序排序:

python -mtimeit -s'a=["a;b","x;y","p;q"]*99' '";".join(a).split(";")'
10000 loops, best of 3: 48.2 usec per loop

python -mtimeit -s'a=["a;b","x;y","p;q"]*99' '[single for pair in a for single in pair.split(";")]'
1000 loops, best of 3: 347 usec per loop

python -mtimeit -s'from itertools import chain; a=["a;b","x;y","p;q"]*99' 'list(chain(*(s.split(";") for s in a)))'
1000 loops, best of 3: 350 usec per loop

python -mtimeit -s'a=["a;b","x;y","p;q"]*99' 'sum([x.split(";") for x in a],[])'
1000 loops, best of 3: 1.13 msec per loop

python -mtimeit -s'a=["a;b","x;y","p;q"]*99' 'sum(map(lambda x: x.split(";"), a), [])'
1000 loops, best of 3: 1.22 msec per loop

python -mtimeit -s'a=["a;b","x;y","p;q"]*99' 'reduce(lambda x,y:x+y, [pair.split(";") for pair in a])'
1000 loops, best of 3: 1.24 msec per loop
Run Code Online (Sandbox Code Playgroud)


Fel*_*ing 5

你可以使用itertools.chain:

>>> a = ["a;b", "c;d","y;z"]
>>> list(itertools.chain(*(s.split(';') for s in a)))
['a', 'b', 'c', 'd', 'y', 'z']
Run Code Online (Sandbox Code Playgroud)