我有两个列表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将无法正确理解它们。