簡體   English   中英

python 中的亂序列表項

[英]out of order list items in python

假設我有一個列表:

lst = [12, 12, 12, 6, 12, 12, 1, 13, 48, 14]

我想要做的是得到亂序的物品。 在這種情況下,這些將是:

[6, 1, 48]

此列表的正確順序是增加一: [12, 12, 12, 12, 12, 13, 14]但最大增加只能是一個數字。 例如,在[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

如何更新代碼以使 output 正確? 我無法捕獲“增加太多”的數字,例如我的示例列表中的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

你會有一個 position 的元組列表,值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM