簡體   English   中英

如何在 Python 的列表中的兩個元素之間找到缺失的元素?

[英]How to find missing elements between two elements in a list in Python?

我有一個列表如下:

['1', '5', '6', '7', '10']

我想找到上面列表中兩個元素之間缺少的元素。 例如,我想獲取'1''5'之間缺少的元素,即'2''3''4' 另一個例子, '5''6'之間沒有元素,所以它不需要返回任何東西。

按照上面的列表,我希望它返回這樣的列表:

['2', '3', '4', '8', '9']

我的代碼:

# Sort elements in a list
input_list.sort()

# Remove duplicates from a list
input_list = list(dict.fromkeys(input_list))

如何返回上面的列表? 我將不勝感激任何幫助。 先感謝您!

如果成對迭代,很容易檢測並填補空白:

L = ['1', '5', '6', '7', '10']
result = []
for left, right in zip(L, L[1:]):
    left, right = int(left), int(right)
    result += map(str, range(left + 1, right))

我會使用range() function 來生成缺失的數字,並可能使用itertools.pairwise()輕松地與之前的數字進行比較。 從 Python 3.10 開始, pairwisezip(arr, arr[1:])更好,因為 pairwise 是在 C 層實現的,不會復制列表。

import itertools
arr = ['1', '5', '6', '7', '10']

new_arr = []

for p, c in itertools.pairwise(arr):
    prev, curr = int(p), int(c)
    if (prev + 1) != curr:
        new_arr.extend([str(i) for i in range(prev + 1, curr)])

如果性能不是問題,您可以使用簡單的嵌套for循環:

input_list = ['1', '5', '6', '7', '10']

missing_list = []

for ind in range(0, len(input_list)-1):

    el_0 = int(input_list[ind])
    el_f = int(input_list[ind+1])

    for num in range(el_0 + 1, el_f):
        missing_list.append(str(num))

以上假設數字是整數。 第一個循環是不推薦的——循環使用列表的長度而不是像enumerate這樣的結構來迭代。 我在這里使用它是為了它的簡單性。

您可以結合使用rangeset並完全跳過迭代。

#original data
data = ['1', '5', '6', '7', '10']

#convert to list[int]
L    = list(map(int, data))

#get a from/to count
R    = range(min(L), max(L)+1)

#remove duplicates and convert back to list[str]
out  = list(map(str, set(R) ^ set(L)))

print(out)

使用經典的 for 循環和range()方法以及單線風扇:

arr = ['1', '5', '6', '7', '10']
ans = []

for i in range(len(arr) - 1): ans += map(str, list(range(int(arr[i]) + 1, int(arr[i + 1]))))
    
print(ans)

輸出: ['2', '3', '4', '8', '9']

暫無
暫無

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

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