Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何在列表中循环查找最大值,并在另一个列表中索引正值_Python_List - Fatal编程技术网

Python:如何在列表中循环查找最大值,并在另一个列表中索引正值

Python:如何在列表中循环查找最大值,并在另一个列表中索引正值,python,list,Python,List,我有两张单子。我想在list\u one中找到最大值,当在list\u two中使用相同索引时,该值为正值。我不想对列表进行排序,因为索引必须保持其完整性。请参见下面的示例(我的实际问题在每个列表中有数百项,因此必须使用循环): 列表中的最大值为977,即索引[3]。但是,如果我们在list\u two中查看同一个索引,我们会发现它有一个负值。下一个最大值是300,该索引在列表2中确实有一个正值。因此,该算法的预期结果将返回1的索引。以下是我到目前为止的情况: max_value = 0 max

我有两张单子。我想在
list\u one
中找到最大值,当在
list\u two
中使用相同索引时,该值为正值。我不想对列表进行排序,因为索引必须保持其完整性。请参见下面的示例(我的实际问题在每个列表中有数百项,因此必须使用循环):

列表中的最大值为
977
,即索引
[3]
。但是,如果我们在
list\u two
中查看同一个索引,我们会发现它有一个负值。下一个最大值是300,该索引在列表2中确实有一个正值。因此,该算法的预期结果将返回
1
的索引。以下是我到目前为止的情况:

max_value = 0
max_index = 0
counter = 0

for value in list_one:
    if value > max_value:
       max_value = value
       max_index = counter
    counter = counter + 1

if list_two[max_index] > 0:
    return max_index
else:
    # Code needed to find 2nd largest value in list one, and so on...
       

您可以使用测试
list\u two
值为正值的键获取
enumerate(list\u one)
的最大值

list_one = [12, 300, 47, 977, 200]
list_two = [-1, 1, 1, -1, 1]

max(enumerate(list_one), key=lambda t: (list_two[t[0]] > 0, t[1]))
这将返回:
(1300)
,给出您要查找的索引和值

给出不同的列表,您将看到一致的结果:

list_one = [12, 300, 47, 977, 500]
list_two = [-1, 1, 1, -1, 1]

max(enumerate(list_one), key=lambda t: (list_two[t[0]] > 0, t[1]))
# (4, 500)

您可以使用测试
list\u two
值为正值的键获取
enumerate(list\u one)
的最大值

list_one = [12, 300, 47, 977, 200]
list_two = [-1, 1, 1, -1, 1]

max(enumerate(list_one), key=lambda t: (list_two[t[0]] > 0, t[1]))
这将返回:
(1300)
,给出您要查找的索引和值

给出不同的列表,您将看到一致的结果:

list_one = [12, 300, 47, 977, 500]
list_two = [-1, 1, 1, -1, 1]

max(enumerate(list_one), key=lambda t: (list_two[t[0]] > 0, t[1]))
# (4, 500)

Python索引从零开始。所以
300
的值在索引
1
处。是的,我相信我的问题就是这样写的?300位于索引1,这使得它在
list\u one
中是最高的值,在
list\u two
的同一索引中有一个正值,只需将两个列表相乘并排序即可。是的,@FinDev,我读错了,对不起。@Canasta我不想排序列表,因为索引必须保持完整性,我已经用这个约定更新了这个问题,Python索引从零开始。所以
300
的值在索引
1
处。是的,我相信我的问题就是这样写的?300位于索引1,这使得它在
list\u one
中是最高的值,在
list\u two
的同一索引中有一个正值,只需将两个列表相乘并排序即可。是的,@FinDev,我读错了,对不起。@Canasta我不想排序列表,因为索引必须保持完整性,我已经用这条规定更新了问题,我打算尝试使用
zip
,但这似乎是一个更好的解决方案。@Mark Meyer感谢您的解决方案!我现在正在尝试实施,一旦我成功了,我将接受。我打算尝试使用
zip
,但这似乎是一个更好的解决方案。@Mark Meyer感谢您的解决方案!我现在正在尝试实现,一旦我让它工作起来,我将接受它