python - 将列表元素与列表列表元素进行比较并有条件地创建新列表

标签 python list loops python-3.x filter

这是关于财务数据的。我有 72 个日期的返回数据的 70% 百分位数列表:

list = [0.11,0.12,...,0.125]

此外,我还有一个列表列表,其中包含 500 家公司在不同日期的 72 个返回(= 500 个列表和每个列表 72 个条目):

list_of_lists = [[0.09,0.08,...,0.15],...,[0.1,0.34,...,0.01]]

我现在要做的是将列表的第一个条目 (0.11) 与列表列表中第一个列表中的所有条目进行比较。如果第一个列表中的条目超过 0.11 阈值(因此在本例中为上面的 0.15),我想将此数字添加到新列表中。然后我想对 list 中的第二个条目 (0.12) 和 list_of_lists 中的第二个列表执行相同的操作。最后,我基本上想要获得 72 个列表(或一个新的列表列表),其中包含高于各自 70% 百分位数的返回。

最佳答案

如果我对你的问题的理解正确,你有 500 个包含 72 个值和 72 个阈值的列表。您想要将 each 列表的 nth 值与 nth 进行比较您的阈值列表的值。换句话说,您想按列进行。首先最简单 transpose list_of_lists 使用 this one cool trick ,这样 list_of_lists 中的每一列都变成一行:

transposed = zip(*list_of_lists)

现在我们可以处理行了。将阈值列表中的每个数字与其在transposed 中的对应行配对。

lists_with_thresholds = zip(list, transposed)

lists_with_thresholds 中的每一项都是一对,其中包含一个截止点和我们要与之比较的值。鸭子排成一排;我们只需要在对的第二部分中找到超过相应截止点的值。

result = []
for threshold, values in lists_with_thresholds:
    values_over_threshold = []
    for x in values:
        if x > threshold:
            values_over_threshold.append(x)
    result.append(values_over_threshold)

或者,将嵌套的 for 循环压缩成嵌套的 list comprehension :

result = [[x for x in values if x > threshold]
          for threshold, values in zip(list, zip(*list_of_lists))]

这两个版本完全等价 - 它们编译成相同的字节码,出于所有意图和目的 - 但我更喜欢列表理解,因为它更短并且具有更实用的感觉。

关于python - 将列表元素与列表列表元素进行比较并有条件地创建新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34644663/

相关文章:

python - 如何使用同一个处理程序处理多个提交表单? (谷歌应用引擎-python)

javascript - 将字典数组传递给 Javascript

python - 创建随机值并将其传递给具有硬边界的 Pandas 数据帧

c - C 程序中的字长频率

c - 从终端输入读取 float 时出现段错误

python - 你能简化 Python 中不等于或等于的链式比较吗?

Python 列表内存重新分配问题

c - 列表,添加到最后,C 编程代码

python - 如何将元组作为函数的参数传递

java - 如何让程序显示可被 5 整除的值的总和,而不是仅显示值本身?