2016-03-08 59 views
1

另一个列表中的值我有两个列表:如何获得所有从列表中的为小于或等于在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]

+0

您的解决方案是什么? –

+0

你比较什么意思?看起来你所做的只是将list2连接到list1,其中list2中的值<= max(list1)。 – AChampion

+0

@SayanChowdhury我想过使用嵌套循环。但那不是我想去的路径 – tanay

回答

1
l1 = [1,5,9,15,17,23] 
l2 = [1,2,3,8,15,20,29,27,34,38,39,56] 

max_val = max(l1) 

l1 + [val for val in l2 if val <= max_val] 
+1

'l1 + [val for val in val in val <= max_val]'也会起作用并避免将list1与其最大值进行比较。 – AChampion

+0

@AChampion - 好点。我没有任何想法就把自己的答案放在自己的位置上。编辑答案以使用您的变体。 – Boa

1

您可以使用列表理解:

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,而不是只一次每个项目进行一次评估。)

1

这样可以将列表1和每一个元素列表2的VAL这比项目list3列表1的最大元素并存储更大。

List1 = [1,5,9,15,17,23] 
List2 = [1,2,3,8,15,20,29,27,34,38,39,56] 

List3 = List1 + [val for val in List2 if val <= max(List1)] 
+0

“或者更小__或者等于_到List1中的任何值” – Boa

+1

刚刚更正。 – XZ6H

-1

我相信这是一个更好的选择:

max1 = max(List1) 
result = List1[:] 

for x in List2: 
    if x <= max1: 
     if not x in result: 
      result.append(x) 

如果你并不需要担心改变列表1,你可以使用它,而不是做一个副本的项目。另外,如果你允许重复,你可以在if中删除x。

+0

1.它可能会比列表理解变体慢得多。 2.它没有给出正确答案 – Boa

+0

正如我在我的评论中所说的,你可以通过删除结果中检查x的if来允许重复。不同的行为旨在作为备用解决方案,删除重复项。但是,是的,在更改代码以允许重复之后,我的实现在两个解决方案1MM次运行后大约会慢2秒。 – EduardoCMB

相关问题