这是关于财务数据的。我有 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/