如何在python中通过列表运行数字?
我有一个列表如何在python中通过列表运行数字?,python,list,python-3.x,Python,List,Python 3.x,我有一个列表[X,9,2,1,8,X,8,7,0,8,8,0,5,0,8,9]。我希望能够将每个“X”字符串替换为数字0-9,并使用这些数字生成每个可能组合的列表 我已经初始化了新列表,并在中添加了旧列表中的项,并使用if语句用新值替换“X”,但运气不太好 期望的输出是生成每个组合的列表,其中“X”被数字0-9替换 我已经尝试将其转换为字符串,然后使用for循环替换X,如下所示: unknown = ['X', 9, 2, 1, 8, 'X', 8, 7, 0, 8, 8, 0, 5, 0, 8
[X,9,2,1,8,X,8,7,0,8,8,0,5,0,8,9]
。我希望能够将每个“X”字符串替换为数字0-9,并使用这些数字生成每个可能组合的列表
我已经初始化了新列表,并在中添加了旧列表中的项,并使用if语句用新值替换“X”,但运气不太好
期望的输出是生成每个组合的列表,其中“X”被数字0-9替换
我已经尝试将其转换为字符串,然后使用for循环替换X,如下所示:
unknown = ['X', 9, 2, 1, 8, 'X', 8, 7, 0, 8, 8, 0, 5, 0, 8, 9]
unknown = ''.join(unknown)
for i in range(10):
known = unknown.replace('X', str(i))
x = unknown.replace('X', str(i))
但这并没有给我所有可能的组合。只需一行就可以了。这就是Python的威力:
[[x, 9, 2, 1, 8, y, 8, 7, 0, 8, 8, 0, 5, 0, 8, 9] for x in range(10) for y in range(10)]
如果希望两个'X'
具有相同的值,则更容易:
[[x, 9, 2, 1, 8, x, 8, 7, 0, 8, 8, 0, 5, 0, 8, 9] for x in range(10)]
我建议计算要替换的元素数量,然后使用
itertools.product
生成所有组合
replacement_count = lst.count('X')
combinations = itertools.product(range(10), repeat=replacement_count)
for combo in combinations:
combo = iter(combo)
new_lst = [next(combo) if ch=='X' else ch for ch in lst]
这是我见过的最丑的一款衬里:
[[next(combo) if ch=='X' else ch for ch in lst] for combo in map(iter, itertools.product(range(10), repeat=lst.count('X')))]
使用
itertools
来自itertools进口产品
l = ['X', 9, 2, 1, 8, 'X', 8, 7, 0, 8, 8, 0, 5, 0, 8, 9]
>>> for numPerm in product(range(10), repeat = l.count('X')):
s = [_ for _ in l]
for num,index in zip(list(numPerm),[i for i,j in enumerate(l) if j == 'X']):
s[index] = num
print(s)
这将适用于任意数量的X,因此你不必一直要求so来做作业发布你尝试过的内容,并给我们一些示例说明它应该是什么样子。我检测到作业。特别是今天早些时候刚刚提出这个问题。你看了吗?今天早些时候在哪里被问到的?好的,非常接近=/不管这是不是家庭作业。重要的是,如果OP真的尝试了足够多的代码,但失败了。你的第一个答案更好。改回来了。我想他只需要一个变量xI已经用我在上面的尝试中显示的相同值完成了“x”,但是您的第一个示例可能会工作(但是将
xrange
更正为range
haha)@lan您使用的是Python 3.x。因此,在Python 2中需要使用range
而不是xrange
,如果使用range(10)
而不是'1234567890'
,则可以避免以后使用int
强制转换。