例
v_list = [["1.mp4", "2.mp4"], ["3.mp4"], ["6.mp4", "7.mp4"], [], []]
我想把这个列表里面的各个列表,重新排列组合
但是我不知道列表里套了几个列表,套的列表里有几个元素,这样就无法具体固定for循环
后来使用 exec() 函数,间接解决了该问题
不考虑顺序的问题,一共有212=4种排列方式
下面是Python代码
s = ""
hui_che = " "
v_list = [["1.mp4", "2.mp4"], ["3.mp4"], ["6.mp4", "7.mp4"], [], []]
video_list = []
for i in v_list:
# 去掉某些列表里面没有元素的列表
if len(i) == 0:
continue
video_list.append(i)
count = 0
each_video = ""
for i in range(len(video_list)):
each_list = video_list[i]
tab = " "
s += """for v_%s in %s:""" % (i, each_list) + hui_che + '\n' + hui_che
each_video += "v_%s," % i
hui_che = hui_che + tab
complex_list = []
each_video = str(each_video).strip(",")
s += """complex_list.append([%s])""" % each_video
语句
print(s)
"""
打印示例结果
for v_0 in ['1.mp4', '2.mp4']:
for v_1 in ['3.mp4']:
for v_2 in ['6.mp4', '7.mp4']:
complex_list.append([v_0,v_1,v_2])
"""
# exec函数是实现这个方法的关键,目的是执行字符串或文件中的Python
exec(str(s))
print(complex_list)
"""
打印示例结果
[['1.mp4', '3.mp4', '6.mp4'], ['1.mp4', '3.mp4', '7.mp4'], ['2.mp4', '3.mp4', '6.mp4'], ['2.mp4', '3.mp4', '7.mp4']]
"""
当然,也可以用递归的方式来实现未知列表之间的排列组合
这里有一个作者提供了类似的示例作为参考,请移步:用python实现排列组合——组合 - 知乎 (zhihu.com)
也可以使用 itertools.product() 对两个列表进行排列组合
import itertools
list1 = ['a', 'b', 'c']
list2 = [1, 2, 3]
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
# 获取 list1 和 list2 的排列组合
combinations = itertools.product(list1, list2)
# 打印每个组合
for combination in combinations:
print(combination)
如果要对未知个列表进行排列组合,则只需将它们传递给 itertools.product() 函数即可