我有两个列表,值存储在子列表中。 我需要将列表一中每个子列表的每个元素与特定值进行比较,如果满足条件,则需要从第二个列表的子列表中提取相应的值。
我使用了下面的代码。但是,当代码给出第二个列表的值时,我遇到了问题。实际上,它打印列表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
答案 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语句