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