![](/img/trans.png)
[英]How to find all elements between two elements repeatedly in a list in 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 開始, pairwise
比zip(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
這樣的結構來迭代。 我在這里使用它是為了它的簡單性。
您可以結合使用range
和set
並完全跳過迭代。
#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.