繁体   English   中英

如何将序列号放入列表中的列表

[英]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]]

第三,从上方获取最大/最小尺寸的列表

maxmin关键函数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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM