2017-09-28 37 views
2

我有名单的两个列表看起来像这样:如何比较列表的两个列表在python

List_1 = [[10.7,7.2],[6.3,5.0],[8.9,10.0]] 
List_2 = [[10.7,6.8],[6.3,4.9],[8.9,12.7]] 

我想创建一个名为List_3第三列表仅包含对List_2的,其中第二个值List_2中对的大小大于List_1中对的第二个值。例如,在这种情况下List_3将看起来像这样的列表:

List_3 = [[8.9,12.7]] 

由于第二值12.7比LIST_1的对所述第二值大的唯一的一个。换句话说,我想里面LIST_1所有列表比较内List_2所有列表只抢到内List_2名单,其中LIST_1的n是大于n List_2,其中列出1和2的样子:

[[m,n],[m,n],[m,n]] 

我试图创建下面的代码,但预期它不工作:

List_3 = [] 
for i in range(len(List_2)): 
    for j in range(len(List_1)): 
     if List_2[i][1] > List_1[j][1]: 
       List_3.append(List_2[i][1]) 
print(List_3) 

我怎么能解决这个问题,这样我可以创造List_3每当List_2 [M] N [N]比LIST_1 [M较大] [N]?

任何想法或建议如何处理这将不胜感激。

回答

6

使用列表理解和zip

>>> List_1 = [[10.7,7.2],[6.3,5.0],[8.9,10.0]] 
... List_2 = [[10.7,6.8],[6.3,4.9],[8.9,12.7]] 
... 
>>> List_3 = [l2 for l1, l2 in zip(List_1, List_2) if l2[1] > l1[1]] 
>>> List_3 
[[8.9, 12.7]] 
1

试试这个:

List_1 = [[10.7,7.2],[6.3,5.0],[8.9,10.0]] 
List_2 = [[10.7,6.8],[6.3,4.9],[8.9,12.7]] 
List_3=[] 
for i ,j in zip(List_1,List_2): 
    if i[1]<j[1]: 
     List_3.append(j) 
print (List_3) 
1

要修改现有代码:

List_1 = [[10.7,7.2],[6.3,5.0],[8.9,10.0]] 
List_2 = [[10.7,6.8],[6.3,4.9],[8.9,12.7]] 

List_3 = [] 
for i in range(len(List_2)): 
    if List_2[i][1] > List_1[i][1]: 
       List_3.append(List_2[i]) 
print(List_3) 

什么,你这样做是遍历所有j值 - 即中第二个值的索引为List_1中的每个第二个值(索引[i][1])。如果我正确理解你,你只想比较两个列表中同一位置的那些,而不是第二个列表中的每个第二个值与第一个列表中的每个第二个值进行比较?因此,你只需要遍历其中的一个列表,并将每个子列表中的第二个值与第一个列表中的相应值进行比较(它们将是相同的索引,即i,这样可以使事情变得简单) 。

注意:这只适用于等长的列表。