【问题标题】:how to insert equal number of values in multiple lists using if-else statements?如何使用 if-else 语句在多个列表中插入相等数量的值?
【发布时间】:2020-06-07 23:21:39
【问题描述】:

有一个数字列表,其中包含一些随机数。我正在对这些数字应用条件并进行一些计算并将结果值存储在多个列表中。但我面临的唯一问题是我无法在所有列表中存储相同数量的数字。假设如果该列表的条件不满足,那么0 应该在那里,但这在我的程序中没有发生。在我的程序中,数字列表是:number = [10, 9, 14, 17, -2, -3, 18, 25],条件如下:

  1. 如果 num == 0
  2. 如果 0
  3. 如果 12
  4. 如果 15
  5. 如果数字 > 20
  6. 如果数字

多个列表是:

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]

【问题讨论】:

  • 您改变方法,对于这样的任务,您可以生成来自具有您强加的细节的特定分布的数字。
  • 这就是我要问的,该怎么做?
  • 在每个条件之后,您想在每个列表中存储一个数字吗?
  • 不要使用多个列表,而是使用字典。

标签: python python-3.x list arraylist


【解决方案1】:

这是一个快速的解决方案,你用零初始化所有列表并使用索引来更新列表:

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)

输出:

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]

【讨论】:

    【解决方案2】:

    尝试这样的事情,使用列表推导。首先关注每个列表,而不是条件。另请注意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]
    

    【讨论】:

    • 这在我的程序中不起作用,因为如果数字介于 12 到 15 之间,那么我也想将值存储在第二个列表中,同样,如果数字介于 15 到 20 之间,那么我想将值存储在第三个和第二个列表中
    • 是的,我明白了,我的意思是恢复您的逻辑以关注列表而不是条件。例如。如果 num >= 12,则存储在 thirdList 中
    • 已编辑以包含其余列表
    • 先生,如果我将这种方法应用于我的程序,那么它将是这样的:forthList = [n*6 if 12
    • 检查结果。匹配您想要的输出,但列表 5 除外,我怀疑您输入的是 *4 而不是 *8。
    【解决方案3】:

    考虑到您想要来自均匀分布的数字,这意味着您获得的所有数字都有相同的概率出现,您可以执行以下操作:

    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)
    

    样本均匀分布在半开区间[低、高)(包括低,但不包括高)。换句话说,给定区间内的任何值都同样可能被uniform绘制。

    【讨论】:

    • 这不是我想要的。我想要根据我提供的条件的数字
    • 你的意思是数字不是整数?
    • 数字是整数,但我不完全明白这对我的程序有何帮助。因为这不会提供我在问题中提到的所需输出。
    • 哦,是的,我错过了重新计算数字
    猜你喜欢
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多