当前位置:  开发笔记 > 编程语言 > 正文

Python - 将列表转换为所有组合列表的优雅方式

如何解决《Python-将列表转换为所有组合列表的优雅方式》经验,为你挑选了1个好方法。

我有一个元素列表,如:

x = ['A, B', '2', '3', 'Jan, Feb']
#      ^                   ^
#    comma separated single string

我想将此列表转换为列表列表,其中每个元素的所有组合都以逗号分隔,以便它看起来像:

[['A', '2', '3', 'Jan'], ['A', '2', '3', 'Feb']
 ['B', '2', '3', 'Jan'], ['B', '2', '3', 'Feb']]

使用Python的内置函数/库实现这一目标的优雅方法是什么?



1> Moinuddin Qu..:

您可以先根据逗号分割列表元素,,然后使用itertools.product以获得所需的列表:

from itertools import product
x = ['A, B', '2', '3', 'Jan, Feb']

new_list = list(product(*[i.split(', ') for i in x]))

其中的内容new_list将是:

[('A', '2', '3', 'Jan'), 
 ('A', '2', '3', 'Feb'), 
 ('B', '2', '3', 'Jan'), 
 ('B', '2', '3', 'Feb')]

根据Dan D的评论,下面是timeitPython 2中间列表V/s中间生成器比较的比较.中间列表表达式略快一些:

mquadri$ python -m timeit "from itertools import product; list(product(*(i.split(', ') for i in ['A, B', '2', '3', 'Jan, Feb'])))"
100000 loops, best of 3: 4.83 usec per loop

mquadri$ python -m timeit "from itertools import product; list(product(*[i.split(', ') for i in ['A, B', '2', '3', 'Jan, Feb']]))"
100000 loops, best of 3: 3.78 usec per loop

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有