我有两个系列(先前和新的),两个系列都有z行。值从0到5,并且希望根据从旧列表切换到新列表的影响分配到存储桶中。对于这种类型的操作,我通常在y语句中使用list comprehension,但是现在我想同时在两个变量上应用我的条件。
我尝试使用以下一行:
buckets = ['5) +10%' if x <= 1 and y == 3 else '4) +5%' if x == 2 and y == 3 else \
'4) +5%' if x <= 1 and y == 2 else '2) -5%' if x == 3 and y == 2 else \
'1) -10%' if x == 3 and y <= 1 else '2) -5%' if x == 2 and y <= 1 else \
'3) 0%' for x in prior for y in new]
这会生成一个包含z * z行的列表,而我希望只有一个包含z行的列表。那么无论如何使用这样的列表理解而不进入笛卡尔积?
答案 0 :(得分:2)
我假设你想要这样的东西
buckets = ['5) +10%' if x <= 1 and y == 3 else '4) +5%' if x == 2 and y == 3 else \
'4) +5%' if x <= 1 and y == 2 else '2) -5%' if x == 3 and y == 2 else \
'1) -10%' if x == 3 and y <= 1 else '2) -5%' if x == 2 and y <= 1 else \
'3) 0%' for (x,y) in zip(prior, new)]
答案 1 :(得分:0)
这应该有效:
buckets = ['5) +10%' if x[i] <= 1 and y[i] == 3 else '4) +5%' if x[i] == 2 and y[i] == 3 else \
'4) +5%' if x[i] <= 1 and y[i] == 2 else '2) -5%' if x[i] == 3 and y[i] == 2 else \
'1) -10%' if x[i] == 3 and y[i] <= 1 else '2) -5%' if x[i] == 2 and y[i] <= 1 else \
'3) 0%' for i in range(len(prior))]