【发布时间】: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