重新排列python列表以避免任何位置匹配



我有两个列表list1和list2。我该如何重新排列列表1(不重新排列列表2(,以便在任何位置都没有匹配,例如:

未确定:list1 = [‘A’, ‘B’, ‘C’] list2 = [‘X’, ‘B’, ‘Z’],正如你所看到的,B在两个列表中都在同一位置,1…所以我想将列表1重新排列为list1 = [‘B’, ‘A’, ‘C’],或者任何其他与列表2没有位置匹配的顺序,而不重新排列列表2

您可以在itertools模块的帮助下完成此操作。可能存在更好/更有效的机制。请注意,当没有可能的解决方案时,process((函数将返回None。

import itertools
def process(L1, L2):
for s in set(itertools.permutations(L1, len(L1))):
if all([a != b for a, b in zip(s, L2)]):
return s
return None
list1 = ['A', 'B', 'C']
list2 = ['X', 'B', 'Z']
print(process(list1, list2))
from itertools import permutations
def diff(list1, list2):
for item in permutations(list1, len(list1)):
if all(map(lambda a, b: a!=b, item, list2)):
return list(item)
return None
list1 = ['A', 'B', 'C']
list2 = ['X', 'B', 'Z']
result = diff(list1, list2)
if result:
print(result, 'vs', list2)
['A', 'C', 'B'] vs ['X', 'B', 'Z']

我使用这段代码解决了它——然而,如上所述,在许多可能的情况下,这个解决方案可能不起作用。在这种情况下,你可以试试这个:

import random
list1 = ['A', 'B', 'C']
list2 = ['X', 'B', 'Z']
for i in list1:
for j in list2:
if i == j in list2:
while list1.index(i) == list2.index(j):
list1.remove(i)
z = len(list1)
rand = random.choice(range(z))
list1.insert(rand, i)
print(list1, list2)

此外,请注意,您在列表中使用了非常奇怪的撇号:而不是'"。AFAIK,Python将无法正确理解它们。

相关内容

最新更新