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



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

我使用了下面的代码。但是,当代码给出第二个列表的值时,我遇到了问题。实际上,它打印列表 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

你可以试试这个:

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

对于list1中的每个sub_list,您都会循环遍历list2中的所有sub_lists。 通过使用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

您的问题是:

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

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

这将获取子列表中每个值的索引,以小于1.01或大于或等于2.43为单位list1,并将它们与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 语句

最新更新