我正在学习python,现在正在研究列表理解。我正在做一个问题,要求生成一个n个元素的列表,其中每个内部列表中的第一个元素表示其索引,下一个n-2个元素是介于1和10之间的随机数,最后一个元素是前面n-2个元素的和,其中值超过5。例如一个样本
[[0, 5, 10, 3, 10], [1, 7, 3, 7, 14], [2, 2, 9, 5, 9]]
我用来生成上述输出的代码是
^{pr2}$但是,来自Java这样的语言,我倾向于编写如下脚本的代码:
import random
SUM = 0
THRESHOLD = 5
INNER_LIST_SIZE = 5
OUTER_LIST_SIZE = 3
li = []
for y in range(OUTER_LIST_SIZE):
innerLi = []
for x in range(INNER_LIST_SIZE):
if x == 0:
innerLi.append(y)
elif x == INNER_LIST_SIZE-1:
innerLi.append(SUM)
else:
rand = random.randint(1,10)
innerLi.append(rand)
if rand > THRESHOLD:
SUM += rand
li.append(innerLi)
SUM = 0
print(li)
从python的角度来看,这些解决方案中哪一个看起来更适合解决问题?它们中的任何一个都是我应该如何解决这个问题的吗?如果不是的话,我可以使用哪些其他python工具来解决这个问题?在
您可以使用列表理解来生成随机数,并将随机数筛选为大于5的随机数。它实际上可以生成非常短的代码。在
我会尽量避免使用所有的helper函数,尤其是因为它们使用
global
(如果必须使用的话,这不是一个好兆头!)。在带注释的修饰:
^{pr2}$您可以使用循环来计算迭代次数,然后使用列表理解和剩余数字的总和:
在哪里
[random.randint(1, 10) for _ in range(number_of_randoms_per_list)]
生成一组随机数(由number_of_randoms_per_list
更改)temp = [temp for temp in random_nums[-2:] if temp > 5]
使用一个索引[-2:]只从先前生成的随机数列表中获取最后一对数字(并实现一个测试,因此只有当它们大于等于5时才会追加它们)my_list.append([list_count, *random_nums[:], sum(temp)])
将我们收集到的所有信息组合成一个列表(通过使用*
运算符解压我们的随机数!在输出:
^{pr2}$相关问题 更多 >
编程相关推荐