在Python中,如何从一个大列表中高效地过滤和存储最大和最小x,y对?

pjngdqdw  于 2023-03-04  发布在  Python
关注(0)|答案(1)|浏览(98)

我有一个循环函数来计算一个列表的组合的2个值:

xyList = []
for i, j in itertools.combinations(mx, 2):
    x= *some calculation*
    y= *some calculation*
    xyList.append([x,y])

但是,列表的组合太多,总是会出现MemoryError,因此,我尝试只保留唯一值:

p=[x,y]
        if not (p in xyList):
            xyList.append(p)

但是仍然存在MemoryError,现在我考虑的是只保留每个x``y和最小值y,也就是这个x,y散点形状的轮廓,但是我想不出一个有效的方法来做到这一点,可能的解决方案是什么?

7ivaypg9

7ivaypg91#

您可能应该将xyList改为 dictionary。假设我们将其命名为xy_limitsxy_limits的每个值都可以是一个列表,该列表将最小值和最大值作为其元素进行跟踪。当您遇到超出此范围的y值时,可以替换正确的值。请考虑:

xy_limits = {}
for i, j in itertools.combinations(...):
    ...
    if x not in xy_limits:
        xy_limits[x] = [y, y]
        continue

    old_limits = xy_limits[x]
    if y < old_limits[0]:
        old_limits[0] = y
    elif y > old_limits[1]:
        old_limits[1] = y

由于old_limitslist(可变类型),所以对该变量的修改(例如,通过分配其元素之一)将在列表的所有出现中被看到,诸如在原始xy_limits

相关问题