Python各个列表交叉进行排列组合

70 阅读1分钟

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']]
"""

当然,也可以用递归的方式来实现未知列表之间的排列组合

也可以使用 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() 函数即可