Как вставить равное количество значений в нескольких списках, используя операторы if-else? - PullRequest
1 голос
/ 24 февраля 2020

Есть список чисел, который содержит несколько случайных чисел. Я применяю условия к этим числам, делаю некоторые вычисления и сохраняю значения результатов в нескольких списках. Но единственная проблема, с которой я сталкиваюсь, заключается в том, что я не могу хранить одинаковое количество чисел во всех списках. Предположим, что если условие не выполняется для этого списка, то должно быть 0, но в моей программе этого не происходит. В моей программе список чисел: number = [10, 9, 14, 17, -2, -3, 18, 25], условия следующие:

  1. если num == 0
  2. если 0
  3. если 12 <число <= 15 </li>
  4. если 15 <число <= 20 </li>
  5. если число> 20
  6. если число <0 </li>

Несколько списков:

firstList = []
secondList = []
thirdList = []
forthList = []
fifthList = []
sixthList = []

Мой подход:

 number = [10, 9, 14, 17, -2, -3, 18, 25]
firstList = []
secondList = []
thirdList = []
forthList = []
fifthList = []
sixthList = []
for num in number:
    if num ==0:
        firstList.append(0)
    else:
        firstList.append(0)

    if 0 < num <= 12:
        cal = num * 2
        secondList.append(cal)
    else:
        secondList.append(0)

    if 12 <= num <= 15:
        cal = num * 2
        cal2 = num * 4
        secondList.append(cal)
        thirdList.append(cal2)
    else:
        thirdList.append(0)
    if 15 < num <= 20:
        cal = num * 2
        cal2 = num * 4
        cal3 = num * 6
        secondList.append(cal)
        thirdList.append(cal2)
        forthList.append(cal3)
    else:
        forthList.append(0)
    if num > 20:
        cal = num * 2
        cal2 = num * 4
        cal3 = num * 6
        cal4 = num * 4
        secondList.append(cal)
        thirdList.append(cal2)
        forthList.append(cal3)
        fifthList.append(cal4)
    else:
        fifthList.append(0)

        if num < 0:
             cal5 = num * 10
             sixthList.append(cal5)
        else:
            sixthList.append(0)

print("list1: " , firstList)
print("list2: " , secondList)
print("list3: " , thirdList)
print("list4: " , forthList)
print("list5: " , fifthList)
print("list6: " , sixthList)

Вывод:

list1:  [0, 0, 0, 0, 0, 0, 0, 0]
list2:  [20, 18, 0, 28, 0, 34, 0, 0, 0, 36, 0, 50]
list3:  [0, 0, 56, 0, 68, 0, 0, 0, 72, 0, 100]
list4:  [0, 0, 0, 102, 0, 0, 108, 0, 150]
list5:  [0, 0, 0, 0, 0, 0, 0, 200]
list6:  [0, 0, 0, 0, -20, -30, 0]

Желаемый вывод:

list1:  [0, 0, 0, 0, 0, 0, 0, 0]
list2:  [20, 18, 28, 34, 0, 0, 36, 50]
list3:  [0, 0, 56, 68, 0, 0, 72, 100]
list4:  [0, 0, 0, 102, 0, 0, 108, 150]
list5:  [0, 0, 0, 0, 0, 0, 0, 200]
list6:  [0, 0, 0, 0, -20, -30, 0, 0]

Ответы [ 3 ]

1 голос
/ 24 февраля 2020

Попробуйте что-то вроде этого, используя понимание списка. Сначала сосредоточьтесь на каждом списке, а не на условии. Также обратите внимание на else 0, который заполнится 0, если условие не выполнено.

numbers = [10, 9, 14, 17, -2, -3, 18, 25]

firstList = [0]*len(numbers)
secondList = [n*2 if n > 0 else 0 for n in numbers]
thirdList = [n*4 if n>=12 else 0 for n in numbers]
fourthList = [n*6 if n>15 else 0 for n in numbers]
fifthList = [n*4 if n>20 else 0 for n in numbers]
sixthList = [n*10 if n<0 else 0 for n in numbers]

print(firstList)
print(secondList)
print(thirdList)
print(fourthList)
print(fifthList)
print(sixthList)

Выходы:

[0, 0, 0, 0, 0, 0, 0, 0]
[20, 18, 28, 34, 0, 0, 36, 50]
[0, 0, 56, 68, 0, 0, 72, 100]
[0, 0, 0, 102, 0, 0, 108, 150]
[0, 0, 0, 0, 0, 0, 0, 100]
[0, 0, 0, 0, -20, -30, 0, 0]
1 голос
/ 24 февраля 2020

вот быстрое решение, вы инициализируете все списки нулями и используете индекс для обновления списков:

number = [10, 9, 14, 17, -2, -3, 18, 25]
firstList = [0] * len(number)
secondList = [0] * len(number)
thirdList = [0] * len(number)
forthList = [0] * len(number)
fifthList = [0] * len(number)
sixthList = [0] * len(number)
for i, num in enumerate(number):

# firstList has 0 anyway
#     if num == 0:
#         firstList[i] = 0


    if 0 < num <= 12:
        cal = num * 2
        secondList[i] = cal

    if 12 < num <= 15:
        cal = num * 2
        cal2 = num * 4
        secondList[i] = cal
        thirdList[i] = cal2

    if 15 < num <= 20:
        cal = num * 2
        cal2 = num * 4
        cal3 = num * 6
        secondList[i] = cal
        thirdList[i] = cal2
        forthList [i]= cal3

    if num > 20:
        cal = num * 2
        cal2 = num * 4
        cal3 = num * 6
        cal4 = num * 8
        secondList[i] = cal 
        thirdList[i] = cal2
        forthList[i] = cal3
        fifthList[i] = cal4
    else:
        if num < 0:
            cal5 = num * 10
            sixthList[i] = cal5


print("list1: " , firstList)
print("list2: " , secondList)
print("list3: " , thirdList)
print("list4: " , forthList)
print("list5: " , fifthList)
print("list6: " , sixthList)

output:

list1:  [0, 0, 0, 0, 0, 0, 0, 0]
list2:  [20, 18, 28, 34, 0, 0, 36, 50]
list3:  [0, 0, 56, 68, 0, 0, 72, 100]
list4:  [0, 0, 0, 102, 0, 0, 108, 150]
list5:  [0, 0, 0, 0, 0, 0, 0, 200]
list6:  [0, 0, 0, 0, -20, -30, 0, 0]
0 голосов
/ 24 февраля 2020

Учитывая, что вам нужны числа из равномерного распределения, а это значит, что все числа, которые вы получаете, имеют одинаковую вероятность выхода, вы можете сделать следующее:

import numpy as np

firstList = [0 for i in range(0,8)]
secondList = np.random.uniform(0,11,8)
thirdList = np.random.uniform(12,14,8)
forthList = np.random.uniform(15,19,8)
fifthList = np.random.uniform(20,1000,8)
sixthList = np.random.uniform(-100,0,8)

Образцы равномерно распределены по полуоткрытому интервал [низкий, высокий) (включает низкий, но исключает высокий). Другими словами, любое значение в данном интервале с одинаковой вероятностью может быть нарисовано равномерным.

...