Python - 能否简化多个if条件和append操作

5
如果可能的话,可以简化以下代码。
c0, c1, c2, c3, c4, c5, c6, c7, c8, c9 = ([] for _ in range(10))
  
  for i in dataset:
    if i[1] == 0:
      c0.append(i)
    elif i[1] == 1:
      c1.append(i)
    elif i[1] == 2:
      c2.append(i)
    elif i[1] == 3:
      c3.append(i)
    elif i[1] == 4:
      c4.append(i)
    elif i[1] == 5:
      c5.append(i)
    elif i[1] == 6:
      c6.append(i)
    elif i[1] == 7:
      c7.append(i)
    elif i[1] == 8:
      c8.append(i)
    else:
      c9.append(i)

尝试将整个数据集分为按类别分类的多个数据集。 以下代码仅用于示例,其中仅包含10个类别,但我正在处理的数据集具有大量类别,因此需要尽可能简化。
3个回答

5
更好的方式是使用列表:
lsts = [c0, c1, c2, c3, c4, c5, c6, c7, c8]
for i in dataset:
    if i[1] < len(lsts):
        lsts[i[1]].append(i)
    else:
        c9.append(i)

列表会包含你想要的内容 :)


2
注意,在原始代码中,else 包含所有非 0-8 的数字,如果有一个 'i[1] == 13',那么你的代码就会失效。 - Christian Sloper
@ChristianSloper 编辑 - U13-Forward
1
非常感谢。我还没有应用,但它似乎是一个更高效的代码。 - 이재환
如果 i < len(lsts) 仍然不正确,应该是如果 i[1] < len(lsts)。 - Christian Sloper
@ChristianSloper 啊,抱歉!我错过了它。 - U13-Forward
@이재환 这个工作吗? - U13-Forward

4

是这样做怎么样?

使用字典而不是像c0, c1, c2这样的嵌套列表。

c = {x:[] for x in range(10)}
  
for i in dataset:
    c[i[1]].append(i)

如果你想向数据集中添加其他项目,就像你在问题中提到的那样,那么可以使用以下方法向追加这些项目:
for i in dataset:
    if 0 <= i[1] <= 8:
        c[i[1]].append(i)
    else:
        c[9].append(i)

-2

你可以使用它。

# if you need cX as var
c0, c1, c2, c3, c4, c5, c6, c7, c8, c9 = ([] for _ in range(10))
database = {0: c0,
            1: c1,
            2: c2,
            ...,
            9: c9}

# else
database = {i: [] for i in range(10)}

for i in dataset:
    if i[1] in dataset:
        database[i].append(i)
    else:
        database[9].append(i)

你的解决方案是不正确的。 - Michael Szczesny
OP正在除以索引1而不是0。你的条件是错误的,1 in [[1,0],[2,0]]False - Michael Szczesny
请告诉我问题出在哪里,让我来纠正它。 - Delta
好的,我来编辑它。 - Delta
database[i] 仍然不正确。 - Christian Sloper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接