【发布时间】:2018-11-02 13:49:31
【问题描述】:
我有一个列表X,其中包含来自1-10 的数字,以及一个使用此列表创建一个具有1-10 随机值的新列表的函数。我想调用这个函数 100 次,并计算相同值出现在嵌套列表中相同位置的次数。
我创建了函数lists 来实现这一点。我的代码返回了正确的答案,但我认为必须有一种更简单的方法来编写它:
从集合导入计数器 随机导入
X = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def randomX(l):
randomX = [random.choice(X) for i in range(len(data))]
return randomX
def lists(times):
lists = [randomX(X) for i in range(times)]
x1 = Counter(sublist[0] for sublist in lists)
x2 = Counter(sublist[1] for sublist in lists)
x3 = Counter(sublist[2] for sublist in lists)
x4 = Counter(sublist[3] for sublist in lists)
x5 = Counter(sublist[4] for sublist in lists)
x6 = Counter(sublist[5] for sublist in lists)
x7 = Counter(sublist[6] for sublist in lists)
x8 = Counter(sublist[7] for sublist in lists)
x9 = Counter(sublist[8] for sublist in lists)
x10 = Counter(sublist[9] for sublist in lists)
return x1, x2, x3, x4, x5, x6, x7, x8, x9, x10
print(lists(100))
这会打印一个看起来像这样的结果,这是我想要的,除了我要对它进行排序。但是,似乎没有必要连续 10 次编写几乎相同的内容,但列表切片不适用于计数器。
(Counter({7: 14, 8: 12, 6: 12, 3: 11, 9: 11, 1: 10, 10: 9, 4: 9, 5: 7, 2: 5}),
Counter({5: 16, 3: 14, 7: 11, 4: 11, 10: 9, 1: 9, 6: 8, 8: 8, 2: 7, 9: 7}),
Counter({3: 14, 2: 14, 7: 13, 8: 13, 4: 10, 6: 10, 5: 10, 1: 8, 9: 5, 10: 3}),
Counter({3: 15, 6: 15, 8: 12, 7: 11, 1: 11, 4: 11, 2: 10, 9: 7, 5: 5, 10: 3}),
Counter({8: 20, 3: 15, 6: 13, 4: 11, 7: 10, 10: 10, 2: 7, 1: 7, 5: 4, 9: 3}),
Counter({9: 15, 6: 13, 10: 12, 4: 11, 2: 10, 8: 9, 3: 8, 5: 8, 1: 8, 7: 6}),
Counter({6: 17, 7: 13, 9: 11, 2: 11, 8: 11, 5: 10, 3: 8, 10: 8, 4: 6, 1: 5}),
Counter({6: 20, 5: 11, 10: 11, 1: 11, 9: 10, 2: 9, 4: 8, 3: 8, 7: 7, 8: 5}),
Counter({8: 13, 10: 13, 4: 13, 5: 11, 9: 11, 1: 10, 3: 9, 2: 8, 7: 6, 6: 6}),
Counter({10: 14, 8: 13, 1: 10, 2: 10, 3: 10, 5: 10, 7: 9, 4: 9, 9: 9, 6: 6}))
有人对我如何简化此代码有任何建议吗?
【问题讨论】:
-
将
randomX = [random.choice(X) for i in range(len(data))]替换为return random.choices(X, k=len(data)).. 或者直接使用不带函数的方法 -
你为什么要为你的函数提供
X作为参数l,并且仍然在你的函数中使用全局X?在其中使用l,这样您就可以为您的函数提供任何列表 -
是什么让你不能循环写
x1 = Counter(sublist[0] for sublist in lists)?
标签: python python-3.x list random counter