【发布时间】:2021-12-09 03:51:32
【问题描述】:
有没有一种捷径可以检测列表中带有替代符号的最长子列表?
例如:
my_list = [-1, -0.5, 1, -3, 4, 5, 5, -1]
返回 4 从 -0.5 到 4?
这是我到目前为止所写的,但我觉得还有更短的内容。
import numpy
my_list = [-1, -0.5, 1, -3, 4, 5, 5, -1]
# function that detects whether a list has alternate signs
# https://stackoverflow.com/questions/6451514/detect-alternating-signs
def is_alternating_signs(a):
return numpy.all(numpy.abs(numpy.diff(numpy.sign(a))) == 2)
# getting all sublists from the main list
sublists = []
for i in range(len(my_list) + 1):
for j in range(i + 1, len(my_list) + 1):
sublists.append(my_list[i:j])
# detecting the longest sublist with alternate signs
max_list = 0
for sublist in sublists:
if is_alternating_signs(sublist) and len(sublist) > max_list:
max_list = len(sublist)
print(max_list)
【问题讨论】:
-
那么,您的预期输出是只是长度还是说起始索引/值?
-
我认为,与其尝试所有子列表,不如从列表的开头迭代并跟踪它交替的时间。这至少应该让它更快。
-
预期的输出只是长度。
标签: python python-3.x list numpy