比较两个python列表时访问最低值

2024-09-27 23:18:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在比较两个整数列表,并尝试在不使用for循环的情况下访问最低值,因为列表非常大。我尝试过使用集合比较,但这样做时我收到一个空集合。目前我的做法是:

differenceOfIpLists = list(set(reservedArray).difference(set(ipChoicesArray)))

我也尝试过:

differenceOfIpLists = list(set(reservedArray) - set(ipChoicesArray))

列表的定义如下:

reservedArray = [169017344, 169017345, 169017346, 169017347, 169017348, 169017349, 169017350, 169017351, 169017352, 169017353, 169017354, 169017355, 169017356, 169017357, 169017358, 169017359, 169017360, 169017361, 169017362, 169017363, 169017364, 169017365, 169017366, 169017367, 169017368, 169017369, 169017600, 169017601, 169017602, 169017603, 169017604, 169017605, 169017606, 169017607, 169017608, 169017609, 169017610, 169017611, 169017612, 169017613, 169017614, 169017615, 169017616, 169017617, 169017618, 169017619...]

ipChoicesArray = [169017344, 169017345, 169017346, 169017347, 169017348, 169017349, 169017350, 169017351, 169017352, 169017353, 169017354, 169017355, 169017356, 169017357, 169017358, 169017359, 169017360, 169017361, 169017362, 169017363, 169017364, 169017365, 169017366, 169017367, 169017368, 169017369, 169017370, 169017371, 169017372, 169017373, 169017374, 169017375, 169017376, 169017377, 169017378, 169017379, 169017380, 169017381, 169017382...] 

这些列表的部分内容是相同的,但它们的长度却大不相同:

reservedArrayLength = 6658
ipChoicesArray = 65536

我还尝试将这些值转换为字符串,并进行相同风格的比较,但也无济于事

一旦我能够提取ipChoicesArray中不在reservedArray中的元素列表,我将在排序后返回最小的元素

我不相信我面临的是最大长度问题


Tags: 元素内容列表for定义情况整数list
3条回答

without using a for-loop as the lists are quite large

假设for循环是一个糟糕的选择,因为列表很大,这很可能是错误的。从列表创建一个集合,反之亦然,除了分配新容器和占用更多内存之外,还将遍历引擎盖下的容器(就像for循环)。在您认为某些东西不能很好地执行之前,请先分析您的代码

除此之外,在您的代码中,您得到空结果的原因似乎是因为您的差异被颠倒了。要获取ipChoicesArray中的元素而不是reservedArray中的元素,您需要将后者与前者区别开来:

diff = set(ipChoicesArray) - set(reservedArray)

减去集合应该可以按照您的意愿工作,请参见以下内容:

ipChoicesArray = [1,3,4,7,1]
reservedArray = [1,2,5,7,8,2,1]
min(list(set(ipChoicesArray) - set(reservedArray)))

###Output###
[3]

顺便说一下,max list是536,870,912个元素的长度

显而易见的解决方案(您只是在错误的方向上设置了差异):

print(min(set(ipChoicesArray) - set(reservedArray)))

你说过它们总是被分类的,而你的反向差异是空的(并且思考你在做什么)表明“选择”是“保留”的超集,因此这也起作用并且可能更快:

print(next(c for c, r in zip(ipChoicesArray, reservedArray) if c != r))

相关问题 更多 >

    热门问题