Python 2.7 在Python2.7中使两个列表相同

Python 2.7 在Python2.7中使两个列表相同,python-2.7,Python 2.7,我有两个python列表 a=[1,4,5] b=[4,1,5] 我需要的是根据a订购b。有什么方法可以简单地做到这一点而不需要任何 循环?最简单的方法是使用zip将两个列表的元素组合成元组: sorted将按元组的第一个元素和第一个元素比较元组;zip*。。。将解压排序后的列表。最简单的方法是使用zip将两个列表的元素组合成元组: sorted将按元组的第一个元素和第一个元素比较元组;zip*。。。将解压已排序的列表。或者可能只是检查一切是否完美。将列表a复制到b if all(x in b

我有两个python列表

a=[1,4,5]
b=[4,1,5]
我需要的是根据a订购b。有什么方法可以简单地做到这一点而不需要任何
循环?

最简单的方法是使用zip将两个列表的元素组合成元组:


sorted将按元组的第一个元素和第一个元素比较元组;zip*。。。将解压排序后的列表。

最简单的方法是使用zip将两个列表的元素组合成元组:


sorted将按元组的第一个元素和第一个元素比较元组;zip*。。。将解压已排序的列表。

或者可能只是检查一切是否完美。将列表a复制到b

if all(x in b for x in a) and len(a)==len(b):
    b=a[:]

或者可能只是检查一下一切是否完美..把清单a复印给b

if all(x in b for x in a) and len(a)==len(b):
    b=a[:]
如果要使列表2与列表1完全相同,则无需打乱顺序或重新安排任何内容,只需将列表2替换为列表1的副本即可:

获取任何iterable并从中生成一个新列表,因此我们可以使用它复制list1,从而创建两个完全相同的列表

也可以只执行list2=list1,但请注意,这会导致对其中一个的任何更改影响另一个,因为它们指向同一个对象,所以这可能不是您想要的

如果list2在别处被引用,因此需要保持相同的对象,则可以使用list2[:]=list1替换列表中的每个值

一般来说,您可能需要第一种解决方案。

如果您想使列表2与列表1完全相同,您不需要打乱顺序或重新安排任何内容,只需将列表2替换为列表1的副本即可:

获取任何iterable并从中生成一个新列表,因此我们可以使用它复制list1,从而创建两个完全相同的列表

也可以只执行list2=list1,但请注意,这会导致对其中一个的任何更改影响另一个,因为它们指向同一个对象,所以这可能不是您想要的

如果list2在别处被引用,因此需要保持相同的对象,则可以使用list2[:]=list1替换列表中的每个值


一般来说,您可能需要第一种解决方案。

根据a中的项目索引对b进行排序,并在末尾列出a中未列出的所有项目

>>> a=[1,4,5,2]
>>> b=[4,3,1,5]
>>> sorted(b, key=lambda x:a.index(x) if x in a else len(a))
[1, 4, 5, 3]

根据a中项目的索引对b进行排序,并在末尾列出a中未列出的所有项目

>>> a=[1,4,5,2]
>>> b=[4,3,1,5]
>>> sorted(b, key=lambda x:a.index(x) if x in a else len(a))
[1, 4, 5, 3]

它们是否总是具有相同的元素?您需要添加另一个示例,其中的元素不会同时出现在两个列表中。否则,一个简单的b=a就可以了。@camelNeck好吧,也许b=lista,否则他们会指向同一个对象,这可能会导致问题。@Lattyware是的,当然。安全总比遗憾好。对我来说,预期的结果并不清楚。你能举几个例子吗?你希望得到什么?它们总是有相同的元素吗?你需要添加另一个例子,其中的元素没有出现在两个列表中。否则,一个简单的b=a就可以了。@camelNeck好吧,也许b=lista,否则他们会指向同一个对象,这可能会导致问题。@Lattyware是的,当然。安全总比遗憾好。对我来说,预期的结果并不清楚。你能举几个例子吗?你会期望得到什么?PEP-8建议不要使用这样的衬里材料-这样会使它更不可读。@Lattyware在哪里说的这是一个“不是”而不是“否”,但在这种情况下,我认为实际操作是隐藏的,这使得代码很难阅读。@Lattyware PEP-8反对多个语句,我认为这里不是这样,他只是假设b中的所有元素都在a中,并且它们的长度相等,那么…@FábioDiniz原始帖子的b=a[:]与条件在同一行,这是我的问题。就像我在复合语句下给出的链接中的第二个示例一样。现在已经修好了。PEP-8建议不要使用像这样的衬里材料——这样会使它的可读性大大降低。@Lattyware在哪里说的?-这是一个“不是”而不是“否”,但在这种情况下,我认为实际操作是隐藏的,这使得代码很难阅读。@Lattyware PEP-8反对多个语句,我认为这里不是这样,他只是假设b中的所有元素都在a中,并且它们的长度相等,那么…@FábioDiniz原始帖子的b=a[:]与条件在同一行,这是我的问题。就像我在复合语句下给出的链接中的第二个示例一样。现在修好了。