【发布时间】:2017-04-16 20:48:28
【问题描述】:
我有一个嵌套列表如下:
A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
我只需要置换每个列表中的元素。
你知道我该怎么做吗?
【问题讨论】:
-
所以你只想打乱每个子列表?
-
显示预期输出
标签: python list nested permutation
我有一个嵌套列表如下:
A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
我只需要置换每个列表中的元素。
你知道我该怎么做吗?
【问题讨论】:
标签: python list nested permutation
你可以这样做:
import random
A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for x in A:
random.shuffle(x)
【讨论】:
要打乱列表理解中的每个子列表,您不能使用random.shuffle,因为它可以正常工作。您可以将random.sample 与样本长度 = 列表长度一起使用:
import random
A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_a = [random.sample(l,len(l)) for l in A]
print(new_a)
输出:
[[2, 1, 3], [5, 4, 6], [7, 9, 8]]
如果您不想修改原始列表,该解决方案是最好的解决方案。否则,在循环中使用shuffle 作为其他人的回答也可以。
【讨论】:
使用来自 itertools 的排列:
from itertools import permutations
A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
out = []
for i in A:
for j in permutations(i):
out.append(list(j))
print out
输出:
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1],
[4, 5, 6], [4, 6, 5], [5, 4, 6], [5, 6, 4], [6, 4, 5], [6, 5, 4],
[7, 8, 9], [7, 9, 8], [8, 7, 9], [8, 9, 7], [9, 7, 8], [9, 8, 7]]
【讨论】: