如何解决在python中有条件的列表中删除数字
表格
[1,3,5,6,7,8,9,11,12,13,18]
到
[1,18]
你会丢弃 [6,8] 和 [12]
解决方法
你可以试试itertools.groupby
:
from itertools import groupby
lst = [1,3,5,6,7,8,9,11,12,13,18]
out = []
for _,g in groupby(enumerate(lst),lambda k: k[0] - k[1]):
g = list(g)
out.append(g[0][1])
if len(g) > 1:
out.append(g[-1][1])
print(out)
打印:
[1,18]
,
我喜欢使用 zip
并行迭代列表:
def drop_consecutive(a):
if len(a)<3:
yield from a
raise StopIteration
yield a[0]
for (left,center,right) in zip(a[:-2],a[1:-1],a[2:]):
if center==left+1 and right==center+1:
pass # skip because they're consecutive
else:
yield center
yield a[-1]
assert([1,18] == list(drop_consecutive( [1,18]))
,
这是一种不使用任何库的方法:
def get_nums_with_dropped_internal_consecutive(nums):
result = []
if not nums:
return result
left = right = nums[0]
for x in nums[1:]:
if x - 1 != right:
result.append(left) if left == right else result.extend([left,right])
left = right = x
else:
right = x
result.append(left) if left == right else result.extend([left,right])
return result
nums = [1,18]
nums_with_dropped_internal_consecutive = get_nums_with_dropped_internal_consecutive(nums)
print(nums_with_dropped_internal_consecutive)
输出:
[1,18]
,
看看这个:
numbers = [2,15]
numbers_new = [numbers[0]]
for i in range(1,len(numbers)-1):
if (numbers[i] == numbers[i-1]+1 and numbers[i] == numbers[i+1]-1):
print(numbers[i],True)
else:
print(numbers[i],False)
numbers_new.append(numbers[i])
numbers_new.append(numbers[-1])
numbers_new
这将返回数字并说明它是否位于连续数字之间,以及一个仅包含这些数字而非连续数字之间的新列表:
3 False
5 False
6 True
7 True
8 False
11 False
12 True
13 False
[2,15]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。