Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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 - Fatal编程技术网

如何在python列表中查找连续数字?

如何在python列表中查找连续数字?,python,Python,我开始用python编程,现在致力于列表。有没有可能在python列表中找到带参数的序列? 我的例子是: 求大于0的奇数序列,求最长的序列,求和;如果有两个长度相同的序列,则输出将是总和较大的序列。 然后打印序列的长度和总和 例如: Input: - 5 0 10 13 2 4 6 5 - 13 1 2 4 5 8 10 12 Output: 3 30 (sequence 8, 10, 12) 谢谢 是的,有 首先用原始列表的第一个元素初始化列表l: longest = [] curren

我开始用python编程,现在致力于列表。有没有可能在python列表中找到带参数的序列? 我的例子是: 求大于0的奇数序列,求最长的序列,求和;如果有两个长度相同的序列,则输出将是总和较大的序列。 然后打印序列的长度和总和

例如:

Input: - 5 0 10 13 2 4 6 5 - 13 1 2 4 5 8 10 12
Output:
3
30 

(sequence 8, 10, 12)
谢谢

是的,有

首先用原始列表的第一个元素初始化列表
l

longest = []
current_longest = []
然后创建一个for循环,该循环将扫描原始列表中的所有内容:

for el in l:
然后检查是否在原始列表中添加了任何内容:

    if ! current_longest and el % 2 == 0:
        current_longest = [el]
    elif el % 2 == 0 and el == longest[-1] + 2:
        current_longest.append(el)
    else:
        if len(current_longest) > longest or sum(longest) < sum(current_longest):
            longest = current_longest

        current_longest = []
if!当前_最长和el%2==0:
当前_最长=[el]
elif el%2==0和el==最长[-1]+2:
当前_最长追加(el)
其他:
如果len(当前最长)>最长或sum(最长)

类似这样的操作。

您可以执行以下操作:

def ranges(lst):
   beg = 0
   for idx, elem in enumerate(lst):
     # find the first even number
     if elem % 2 == 0:
       # yield the range of odd numbers
       yield (beg, idx)
       # set a new begin
       beg = idx + 1
   else:
     # the last range
     yield (beg, len(lst))

def rngLen(rng):
    # a length of a range
    return rng[1] - rng[0]

def findSum(lst):
    rngs = list(ranges(lst))
    # find the maximum range
    max_range = max(map(rngLen, rngs))
    # get all the ranges with the length = max_range
    all_max_ranges = filter(lambda rg: rngLen(rg) == max_range, rngs)
    # get the sums of all the max ranges
    all_sums = map(lambda rg: sum(lst[rg[0]: rg[1]]), all_max_ranges)
    # return the max len and sum
    return max_range, max(all_sums)

您的描述中显示了奇数序列,但您的结果显示了偶数序列,因此下面是如何使用
enumerate
iter
w/
next

lst = [-5, 0, 10, 13, 2, 4, 6, 5, -13, 1, 2, 4, 5, 8, 10, 12]

res = []
for i, v  in enumerate(lst):
    a = iter(lst[i:])
    b = next(a)
    l = []
    while not b % 2:
        l.append(b)
        try:
            b = next(a)
        except StopIteration:
            break
    if l:
        res.append(l)

print(sorted(res, key=lambda x: (len(x),sum(x)), reverse = True)[0])
# [8, 10, 12]

如果您只需要奇数序列,如何将
8、10、12
用作序列?