[英]How to create a list of sequential numbers when created from "for in" looping?
[英]How to put sequential numbers into lists from a list
我有一个清单数字说,
[1,2,3,6,8,9,10,11]
首先,我想获取列表中数字(n, n+1)
之间的差异(步长)之和。
其次,如果一组连续的数字之间相差1,则将它们放在一个列表中,即在此示例中有两个这样的列表,
[1,2,3]
[8,9,10,11]
然后将其余数字放在另一个列表中,即示例中只有一个这样的列表,
[6]
。
第三,从顺序列表中获得最大/最小大小的列表,在此示例中为[1,2,3]
, [8,9,10,11]
,最大列表为,
[8,9,10,11]
最低清单是
[1,2,3]
。
实现此目的的最佳方法是什么?
首先,我想获取列表中数字
(n, n+1)
之间的差异(步长)之和。
对列表中元素的连续差异使用sum
:
>>> sum(lst[i] - x for i, x in enumerate(lst[:-1], start=1))
10
其次,如果一组连续的数字之间相差1,则将它们放在一个列表中,即在此示例中有两个这样的列表,然后将其余数字放在另一个列表中,即在其中只有一个这样的列表。这个例子,
itertools.groupby
通过对引用itertools.count
对象上每个元素的差异进行分组来做到这一点:
>>> from itertools import groupby, count
>>> c = count()
>>> result = [list(g) for i, g in groupby(lst, key=lambda x: x-next(c))]
>>> result
[[1, 2, 3, 4], [6], [8, 9, 10, 11]]
第三,从上方获取最大/最小尺寸的列表
max
和min
, 关键函数为sum
:
>>> max(result, key=sum)
[8, 9, 10, 11]
>>> min(result, key=sum)
[6] #??? shouldn't this be [6]
我想知道您是否已经得到答案(鉴于您的答案中缺少4个),因为我天真地尝试过的第一件事就产生了该答案。 (那个和/或它读起来像一个作业问题)
>>> a=[1,2,3,4,6,8,9,10,11]
>>> sum([a[x+1] - a[x] for x in range(len(a)-1)])
10
>>> [a[x] for x in range(len(a)-1) if abs(a[x] - a[x+1]) ==1]
[1, 2, 3, 8, 9, 10]
或者,尝试:
a=[1,2,3,6,8,9,10,11]
sets = []
cur_set = set()
total_diff = 0
for index in range(len(a)-1):
total_diff += a[index +1] - a[index]
if a[index +1] - a[index] == 1:
cur_set = cur_set | set([ a[index +1], a[index]])
else:
if len(cur_set) > 0:
sets.append(cur_set)
cur_set = set()
if len(cur_set) > 0:
sets.append(cur_set)
all_seq_nos = set()
for seq_set in sets:
all_seq_nos = all_seq_nos | seq_set
non_seq_set = set(a) - all_seq_nos
print("Sum of differences is {0:d}".format(total_diff))
print("sets of sequential numbers are :")
for seq_set in sets:
print(sorted(list(seq_set)))
print("set of non-sequential numbers is :")
print(sorted(list(non_seq_set)))
big_set=max(sets, key=sum)
sml_set=min(sets, key=sum)
print ("Biggest set of sequential numbers is :")
print (sorted(list(big_set)))
print ("Smallest set of sequential numbers is :")
print (sorted(list(sml_set)))
将产生输出:
Sum of differences is 10
sets of sequential numbers are :
[1, 2, 3]
[8, 9, 10, 11]
set of non-sequential numbers is :
[6]
Biggest set of sequential numbers is :
[8, 9, 10, 11]
Smallest set of sequential numbers is :
[1, 2, 3]
希望所有帮助;-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.