【问题标题】:How to append items in multiple lists having same index into their original lists?如何将具有相同索引的多个列表中的项目附加到其原始列表中?
【发布时间】:2021-07-30 08:28:29
【问题描述】:

我有任意数量的列表,例如这里取 3 个。这些列表将具有相同数量的项目,我想将具有相同索引的项目附加到其原始列表中。这必须以一定的概率完成。

import random

individuals = 6
lists = 3

L1 = ['A', 'A', 'A', 'A', 'a', 'a']
L2 = ['B', 'B', 'B', 'B', 'b', 'b']
L3 = ['C', 'C', 'C', 'C', 'c', 'c']

for i in range(1, lists+1):
    for j in range(0, 6): 
      if random.random() <= 0.8:  
        ((eval(f'L{i}'))).append((eval(f'L{i}{[j]}')))
      else:
        pass

for i in range(1, lists+1):
    print(eval(f'L{i}'))

我想要的是,如果 L1[0]、L2[0] 和 L3[0] 满足概率,它们将被附加到它们的原始列表中。然后我们对 L1[0]、L2[1] 和 L3[2] 等执行相同的操作,直到我们用完原始项目(本例中为 6 个)。如果不满足概率,所有具有相同索引的项目将不会被追加。

目前的结果是最后给了我大小不等的列表。列表的大小应该相同,因为我需要的是所有列表都立即附加或不附加。

当前结果:

['A', 'A', 'A', 'A', 'a', 'a', 'A', 'A', 'a', 'a']
['B', 'B', 'B', 'b', 'b', 'b', 'B', 'B', 'B', 'b', 'b']
['C', 'C', 'C', 'c', 'c', 'c', 'C', 'C', 'C', 'c', 'c']

【问题讨论】:

  • 不确定是否发现问题,但可以肯定的是,如果您根据随机过程添加项目,那么输出列表的长度显然没有理由。也许我没有抓住重点。
  • 您在if 测试中调用了random.random(),这意味着您无法事先控制是否会为给定列表调用append(),因此append 的数量每个列表的 s 可能不同。请停止使用 eval 这样。这是不必要的。制作一个名为L 的字典,然后使用L[1] 代替L1 并使用L[i] 代替eval(f'L{i}')
  • 我想要的是所有满足概率的列表。因此,如果概率 = 0.9,代码将 L1 附加到 L1[0],将 L2 附加到 L2[0],将 L3 附加到 L3[0]。如果概率为 0.2,则不会附加任何列表。我们对所有项目都这样做

标签: python list for-loop random append


【解决方案1】:

IIUC,你只需要将两个for循环的顺序颠倒一下即可:

import random

individuals = 6
lists = 3

L1 = ['A', 'A', 'A', 'A', 'a', 'a']
L2 = ['B', 'B', 'B', 'B', 'b', 'b']
L3 = ['C', 'C', 'C', 'C', 'c', 'c']

for j in range(0, 6): 
    p = random.random()             # Random probability (same for all lists)
    if p <= 0.8:
        for i in range(1, lists+1): # all list get appended
            ((eval(f'L{i}'))).append((eval(f'L{i}{[j]}')))

for i in range(1, lists+1):
    print(eval(f'L{i}'))

输出

['A', 'A', 'A', 'A', 'a', 'a', 'A', 'A', 'A', 'a', 'a']
['B', 'B', 'B', 'B', 'b', 'b', 'B', 'B', 'B', 'b', 'b']
['C', 'C', 'C', 'C', 'c', 'c', 'C', 'C', 'C', 'c', 'c']
​

【讨论】:

  • 我现在看到了我的错误
  • @user15849775——回想起来,事情往往很清楚。
【解决方案2】:

我不确定我是否理解。也许你这么说。

for j in range(0, 6):
      if random.random() <= 0.8:
          for i in range(1, lists + 1):
              ((eval(f'L{i}'))).append((eval(f'L{i}{[j]}')))
      else:
        pass

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2010-11-14
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多