前言
找出一個列表中,所有出現的連續數字,如列表a=[1,2,3,8,6,7,5,10,16,98,99,100,101],不考慮數字的順序
連續的數字是指:123, 456, 78 這種,可以是連續的2個,也可以是多個,135 這種是不連續的。
於是可以知道連續的數字是[1,2,3],[5,6,7,8], [98,99,100,101]
判斷列表中數字連續
首先得知道如何判斷列表中的數字是連續的
x = [1,2,3,4]
y = [5,6,8,9]
可以用到棧的知識,定義一個空列表,當成一個棧,往里面添加數據,判斷符合條件塞進去,不符合條件就直接結束判斷
"""
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
判斷列表中的數字是否連續
x = [1,2,3,4]
y = [5,6,8,9]
"""
x = [1, 2, 3, 4]
z = []
flag = True
for i in x:
if len(z) == 0 or z[-1] + 1 == i:
z.append(i)
else:
flag = False
break
print(flag)
找出列表中連續數字
找出一個列表中,所有出現的連續數字,如列表a=[1,2,3,8,6,7,5,10,16,98,99,100,101],不考慮數字的順序
"""
有一個列表a=[1,2,3,8,6,7,5,10,16,98,99,100,101] 不考慮數字的順序
找出連續的數字
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
"""
a = [1,2,3,8,6,7,5,10,16,98,99,100,101]
s = [] # 空棧
for i in sorted(set(a)):
if len(s) == 0 or s[-1] + 1 == i:
s.append(i) # 入棧
else:
if len(s) >= 2:
print(s)
s = [] # 清空
s.append(i) # 入棧
# 最后一輪,需判斷下
if len(s) >= 2:
print(s)
運行結果
[1, 2, 3]
[5, 6, 7, 8]
[98, 99, 100, 101]
還有一種反向思維的判斷,這是群里一個小伙伴給出的,更簡潔一點
aa = [1, 2, 3, 8, 6, 7, 5, 10, 16, 98, 99, 100, 101]
l1 = []
for x in sorted(set(aa)):
l1.append(x)
if x+1 not in aa:
if len(l1) != 1:
print(l1)
l1 = []