我试图形成多个列表,并根据条件将另一个列表的值排序到每个列表中。
我有以下内容:
b_421, b_521, b_621, b_721, b_821, b_921, b_1021, b_1121, b_1221, b_1321, b_1421, b_1520 = ([] for i in range(12))
for n in x_list:
if n < float(421):
b_421.append(n)
elif float(421) <= n < float(521):
b_521.append(n)
elif float(521) <= n < float(621):
b_621.append(n)
elif float(621) <= n < float(721):
b_721.append(n)
elif float(721) <= n < float(821):
b_821.append(n)
elif float(821) <= n < float(921):
b_921.append(n)
elif float(921) <= n < float(1021):
b_1021.append(n)
elif float(1021) <= n < float(1121):
b_1121.append(n)
elif float(1121) <= n < float(1221):
b_1221.append(n)
elif float(1221) <= n < float(1321):
b_1321.append(n)
elif float(1321) <= n < float(1421):
b_1421.append(n)
elif float(1421) <= n < float(1520):
b_1520.append(n)
但是,我的所有列表都包含原始列表x_list中的所有元素。
我在做什么错了?
已编辑
:即使我以以下方式定义列表:
b_421=[]
b_521=[]
b_621=[]
b_721=[]
b_821=[]
b_921=[]
b_1021=[]
b_1121=[]
b_1221=[]
b_1321=[]
b_1421=[]
b_1520=[]
我仍然让b_421包含原始列表中的所有数字。原始列表是从pandas dataFrame列创建的,这可能是问题吗?
x_list = df['col1'].tolist()
我得到此结果的唯一方法是给我我想要的输出,即每个列表都包含期望范围内的值,是我像上面那样单独定义列表,然后为每个列表创建一个单独的(如果组合)清单。这样:
for n in x_list:
if n < float(421):
b_421.append(n)
for n in x_list:
if float(421) <= n < float(521):
b_521.append(n)
for n in x_list:
if float(521) <= n < float(621):
b_621.append(n)
for n in x_list:
if float(621) <= n < float(721):
b_721.append(n)
for n in x_list:
if float(721) <= n < float(821):
b_821.append(n)
for n in x_list:
if float(821) <= n < float(921):
b_921.append(n)
for n in x_list:
if float(921) <= n < float(1021):
b_1021.append(n)
for n in x_list:
if float(1021) <= n < float(1121):
b_1121.append(n)
for n in x_list:
if float(1121) <= n < float(1221):
b_1221.append(n)
for n in x_list:
if float(1221) <= n < float(1321):
b_1321.append(n)
for n in x_list:
if float(1321) <= n < float(1421):
b_1421.append(n)
for n in x_list:
if float(1421) <= n < float(1520):
b_1520.append(n)
这对我来说很疯狂-也许我的环境刚刚坏了?
答案 0 :(得分:1)
代码似乎运行正常。我想您已经正确定义了列表。这是一种更好的方法:您可以创建一个字典来存储所有列表:
steps = [421, 521, 621, 721, 821, 921, 1021, 1121, 1221, 1321, 1421, 1520]
output = { 'b_' + str(value): [] for value in steps }
steps.insert(0, 0)
ranges = [[steps[i], steps[i + 1]] for i in range(len(steps) - 1)]
for n in x_list:
for range in ranges:
if float(range[0]) <= n < float(range[1]):
output['b_' + str(range[1])].append(n)
这不是最有效的解决方案,因为即使将循环添加到列表中,它也会运行循环。这是示例输入和输出:
x_list = [1, 123, 345, 567, 678, 1000]
output = {'b_421': [1, 123, 345], 'b_521': [], 'b_621': [567], 'b_721': [678], 'b_821': [], 'b_921': [], 'b_1021': [1000], 'b_1121': [], 'b_1221': [], 'b_1321': [], 'b_1421': [], 'b_1520': []}
答案 1 :(得分:0)