如何在python中关联两个列表?

时间:2019-09-03 15:37:17

标签: python python-3.7

我有两个列表,值存储在子列表中。 我需要将列表一中每个子列表的每个元素与特定值进行比较,如果满足条件,则需要从第二个列表的子列表中提取相应的值。

我使用了下面的代码。但是,当代码给出第二个列表的值时,我遇到了问题。实际上,它打印列表2中所有子列表的所有第一元素,而不是给出与第一列表中的子列表相关的子列表的第一元素。

list1 = [[6.47, 1.34, 1.35],[5.41, 1.4, 1.39],[1.64, 2.43, 1.63]]
list2 = [[5820.0, 7870.0, 7600.0, 7590.0],[4660.0, 7770.0, 7480.0, 
7540.0],[4340.0, 9000.0, 5690.0, 50.0]]
for S in list1:
     if 2.43 <= (S[0]) or 1.01 > (S[0]):
      print(S[0])
      print('Single Axle')
      for W in list2:
           result = W[0]
           print(result)

我的目标是以这种方式获得结果:

6.47
single axle
5820
5.41
single axle
4660

但是我得到的答案是:

6.47
Single Axle
5820.0
4660.0
4340.0
5.41
Single Axle
5820.0
4660.0
4340.0

4 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

list1 = [[6.47, 1.34, 1.35],[5.41, 1.4, 1.39],[1.64, 2.43, 1.63]]
list2 = [[5820.0, 7870.0, 7600.0, 7590.0],[4660.0, 7770.0, 7480.0, 
7540.0],[4340.0, 9000.0, 5690.0, 50.0]]

for i, v in enumerate(list1):
     if 2.43 <= (v[0]) or 1.01 > (v[0]):
        print(v[0])
        print('Single Axle')
        print(list2[i][0])

结果是:

6.47
Single Axle
5820.0
5.41
Single Axle
4660.0

答案 1 :(得分:1)

您的问题是:

for W in list2:
    result = W[0]
    print(result)

这将遍历list2,并打印每个子列表的第一项。 相反,您只想选择相应的子列表。

list1 = [[6.47, 1.34, 1.35],[5.41, 1.4, 1.39],[1.64, 2.43, 1.63]]
list2 = [[5820.0, 7870.0, 7600.0, 7590.0],[4660.0, 7770.0, 7480.0, 
7540.0],[4340.0, 9000.0, 5690.0, 50.0]]
for Sindex, S in enumerate(list1):
    if 2.43 <= (S[0]) or 1.01 > (S[0]):
        print(S[0])
        print('Single Axle')
        print(list2[Sindex][0])

enumerate()允许简明的索引检索,然后该索引用于引用list2

答案 2 :(得分:1)

对于list1中的每个子列表,您都在list2中的所有子列表上循环。 通过使用zip()函数,您可以同时在两个列表上进行迭代,然后可以直接提取关键元素。

list1 = [
    [6.47, 1.34, 1.35],
    [5.41, 1.4, 1.39],
    [1.64, 2.43, 1.63],
    ]
list2 = [
    [5820.0, 7870.0, 7600.0, 7590.0],
    [4660.0, 7770.0, 7480.0, 7540.0],
    [4340.0, 9000.0, 5690.0, 50.0],
    ]

for list1_group, list2_group in zip(list1, list2):
    critical_element = list1_group[0]
    if critical_element < 1.01 or critical_element >= 2.43:
        print(critical_element)
        print('Single Axle')
        print(list2_group[0])

提供输出

6.47
Single Axle
5820.0
5.41
Single Axle
4660.0

答案 3 :(得分:0)

我不确定从发布的代码中您想要什么。您已经说过要检查子列表的每个元素,但是您的代码只会查看每个子列表的第一个元素。

这将获取list1的子列表中小于1.01或大于或等于2.43的子列表中每个值的索引,并将它们与相应的值一起打印出来。 list2中相同的索引:

list1 = [[6.47, 1.34, 1.35],[5.41, 1.4, 1.39],[1.64, 2.43, 1.63]]
list2 = [
   [5820.0, 7870.0, 7600.0, 7590.0],
   [4660.0, 7770.0, 7480.0, 7540.0],
   [4340.0, 9000.0, 5690.0, 50.0],
]

indexes = [
    (i, j)
    for i, sub_list in enumerate(list1)
    for j, num in enumerate(sub_list)
    if num < 1.01 or num >= 2.43
]

for i in indexes:
    print(list1[i[0]][i[1]])
    print('Single Axle')
    print(list2[i[0]][i[1]])

这将为您提供以下输出:

6.47
Single Axle
5820.0
5.41
Single Axle
4660.0
2.43
Single Axle
9000.0

尽管我认为将相关数据单行打印会更整洁:

for i in indexes:
    print(list1[i[0]][i[1]], 'Single Axle', list2[i[0]][i[1]])

输出:

6.47 Single Axle 5820.0
5.41 Single Axle 4660.0
2.43 Single Axle 9000.0

编辑:根据最新评论,需要评估不同的条件并产生不同的输出吗?如果是这种情况,使用for循环可能会更容易。

for i, sub_list in enumerate(list1):
    for j, num in enumerate(sub_list):
        if num < 1.01 or num >= 2.43:
            print(num, 'Single Axle', list2[i][j])
        elif # some other condition:
            print(num, 'Different condition', list2[i][j])

如果条件互斥,则可以使用elif继续添加新条件。如果条件重叠,请使用单独的if语句