另一个列表中的值我有两个列表:如何获得所有从列表中的为小于或等于在python
List1 = [1,5,9,15,17,23]
List2=[1,2,3,8,15,20,29,27,34,38,39,56]
我想比较列表1和列表2,并希望得到来自列表1中的所有值还有List2中的那些值要么小于List1中的任何值,要么与之相当。
,所以我得到的名单将 [1,5,9,15,17,23,1,2,3,8,15,20]
另一个列表中的值我有两个列表:如何获得所有从列表中的为小于或等于在python
List1 = [1,5,9,15,17,23]
List2=[1,2,3,8,15,20,29,27,34,38,39,56]
我想比较列表1和列表2,并希望得到来自列表1中的所有值还有List2中的那些值要么小于List1中的任何值,要么与之相当。
,所以我得到的名单将 [1,5,9,15,17,23,1,2,3,8,15,20]
您可以使用列表理解:
max1 = max(List1)
max2 = max(List2)
newlist = [x for x in List1 if x <= max2] + [x for x in List2 if x <= max1]
您可以将最大呼叫放入列表理解中,但速度会更慢。 (他们需要在列表1和列表2,而不是只一次每个项目进行一次评估。)
我相信这是一个更好的选择:
max1 = max(List1)
result = List1[:]
for x in List2:
if x <= max1:
if not x in result:
result.append(x)
如果你并不需要担心改变列表1,你可以使用它,而不是做一个副本的项目。另外,如果你允许重复,你可以在if中删除x。
1.它可能会比列表理解变体慢得多。 2.它没有给出正确答案 – Boa
正如我在我的评论中所说的,你可以通过删除结果中检查x的if来允许重复。不同的行为旨在作为备用解决方案,删除重复项。但是,是的,在更改代码以允许重复之后,我的实现在两个解决方案1MM次运行后大约会慢2秒。 – EduardoCMB
您的解决方案是什么? –
你比较什么意思?看起来你所做的只是将list2连接到list1,其中list2中的值<= max(list1)。 – AChampion
@SayanChowdhury我想过使用嵌套循环。但那不是我想去的路径 – tanay