python - python中的乱序列表项
问题描述
假设我有一个列表:
lst = [12, 12, 12, 6, 12, 12, 1, 13, 48, 14]
我想要做的是得到乱序的物品。在这种情况下,这些将是:
[6, 1, 48]
此列表的正确顺序是增加一:[12, 12, 12, 12, 12, 13, 14]
但最大增加只能是一个数字。例如, in [1, 2, 9, 3]
,9
将是无序的。
我目前正在做的是:
for idx in range(1, len(lst)):
if lst[idx] < lst[idx-1]: # if item is smaller than the previous one
print(lst[idx])
[out:] 6
1
14
如何更新代码以使输出正确?我无法捕获“增加太多”的数字,例如48
在我的示例列表中。
解决方案
如果我正确解释了您对无序的定义,那么以下应该可以完成工作:
从第一个值开始并接受相同的值或大于 1 的值。并将所有其他值添加到您的结果中
#!/usr/bin/env python
def get_ooo(lst):
if len(lst) == 0:
return []
rslt = []
prev_val = lst[0]
for val in lst[1:]:
if val == prev_val:
continue
if val == prev_val + 1:
prev_val = val
continue
rslt.append(val)
return rslt
lst = [12, 12, 12, 6, 12, 12, 1, 13, 48, 14]
print(get_ooo(lst))
或稍作修改的版本也可以完成这项工作:
def get_ooo(lst):
if len(lst) == 0:
return []
rslt = []
prev_val = lst[0]
for val in lst[1:]:
if prev_val <= val <= prev_val + 1:
prev_val = val
continue
rslt.append(val)
return rslt
如果您还想知道乱序数字的索引,您可以执行以下操作:
def get_ooo(lst):
if len(lst) == 0:
return []
rslt = []
prev_val = lst[0]
for idx, val in enumerate(lst[1:], 1):
if prev_val <= val <= prev_val + 1:
prev_val = val
continue
rslt.append((idx, val))
return rslt
你会有一个位置元组的列表,值
推荐阅读
- json - 循环 json 对象键以添加 Google 地图数据
- javascript - axios报错转换后的数据必须是字符串、ArrayBuffer、Buffer或Stream
- javascript - 从带有节点位置的 JSON 文件加载 go.js 图
- c# - 如何使用 EF Core 在翻译后的 SQL 中获取 COUNT DISTINCT
- anaconda - conda create: UnsatisfiableError
- ansible - 如何从ansible jinja2模板中的列表中输出值
- netlogo - 如何获得一个补丁来计算通过它的海龟
- javascript - 如何使用 JQuery 设置 onclick 事件?
- azure - 为什么带有 ResourceName 开关的 Get-AZRoleAssignment 不起作用?
- javascript - 如何通过在 typescript 中调用函数来关闭 bootstrap 4 模型