python - 用元素组合替换列表中的变量
问题描述
我想用元素组合替换列表中的变量。更加具体:
我有这两个清单
liste1 = [1,2,3,'X','X',4]
liste2 = [5,6,7]
我想得到一个包含以下元素的列表:
[1,2,3,5,6,4]
[1,2,3,5,7,4]
[1,2,3,6,7,4]
[1,2,3,6,5,4]
[1,2,3,7,5,4]
[1,2,3,7,6,4]
有人知道怎么做吗?
解决方案
你可以这样做:
from itertools import permutations
liste1 = [1, 2, 3, 'X', 'X', 4]
liste2 = [5, 6, 7]
def replacements(liste1, liste2):
x_indices = [i for i, val in enumerate(liste1) if val == 'X']
nb = len(x_indices)
for perm in permutations(liste2, nb):
l1 = liste1[:] # if we want to preserve the original and yield different lists
for i, new_val in zip(x_indices, perm):
l1[i] = new_val
yield l1
for r in replacements(liste1, liste2):
print(r)
输出:
[1, 2, 3, 5, 6, 4]
[1, 2, 3, 5, 7, 4]
[1, 2, 3, 6, 5, 4]
[1, 2, 3, 6, 7, 4]
[1, 2, 3, 7, 5, 4]
[1, 2, 3, 7, 6, 4]
我们首先列出出现“X”的索引,然后生成尽可能多的元素的排列liste2
。对于每个排列,我们替换“X”。
推荐阅读
- .net - 将一台复制服务器变成观察者
- ssl-certificate - 通配符 ssl 证书 (*.blog.mydomain.com) 在 blog.mydomain.com 上不起作用
- jmeter - 无法通过 Jmeter 脚本更新字段值
- amazon-web-services - AWS ElasticSearch 迁移到另一个区域
- authorization - Swagger 令牌授权
- powershell - PowerShell 字符串中字母的第一个索引
- javascript - 根据对象内部的键对对象进行排序
- java - Java:数据库连接代码问题
- c++ - Qt MacOs 应用程序在退出时使用 dyld::fastBlindLazySymbol 和 sold_stub_binder 崩溃
- c++ - 从给定的二维点计算 SIFT 描述符