我有两个列表列表如下:
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大于List_2的n,其中列表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_2 [m] [n]中的n大于List_1 [m] [n],我怎么能解决这个问题以便创建List_3?
非常感谢任何有关如何处理此问题的想法或建议。
答案 0 :(得分:7)
使用列表推导和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 :(得分: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)
答案 2 :(得分: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中每个第二个值(索引List_2
)的[i][1]
中第二个值的索引。如果我理解正确,你想只比较两个列表中相同位置的那些,而不是第二个列表中的每个第二个值与第一个中的每个第二个值进行比较吗?
因此,您只需要遍历其中一个列表,并将每个子列表中的第二个值与它在第一个列表中的相应值进行比较(它们将是相同的索引,{{1这样可以保持简单)。
注意:这只适用于长度相等的列表。