Home > front end >  Python - Can Multiple if-condition and append be simplified
Python - Can Multiple if-condition and append be simplified

Time:09-29

If it is possible to simplify the following code.

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)

Trying to divide the whole dataset into class-wise multiple datasets. Code below is just for example which has only 10 classes, but the dataset I'm working on has massive numbers of classes, so need to simplify as possible.

CodePudding user response:

How about like this?

Use dictionary instead of nested lists like c0, c1, c2

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

If u want to append other items in the dataset to the c9 as like u mentioned in your question, then

for i in dataset:
    if 0 <= i[1] <= 8:
        c[i[1]].append(i)
    else:
        c[9].append(i)

tell me if its okay for you...

CodePudding user response:

Better with a list:

lsts = [c0, c1, c2, c3, c4, c5, c6, c7, c8]
for i in dataset:
    if i < len(lsts):
        lsts[i[1]].append(i)
    else:
        c9.append(i)

And the lists will contain what you want :)

CodePudding user response:

you can use it.

# 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)
  • Related