[英]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.