2024-03-28 08:59:49 发布
网友
为了使我的程序更漂亮而不是更丑陋,我试图找到一种更像Python的方法,将一个值多次添加到列表中。我现在使用循环,但我创建了一个不使用的变量。
l = []; n = 5; v = 0.5 for i in xrange(n): l.append(v)
有什么想法吗?
尝试对列表使用list.extend和乘法运算符
list.extend
l.extend([v] * n)
最一般的答案是使用^{}和generator expression:
l.extend(generate_value() for _ in range(n))
这将添加一个值n次。请注意,这将每次评估generate_value()其他答案可能具有的可变值的单步执行问题:
n
generate_value()
>>> [[1]] * 5 [[1], [1], [1], [1], [1]] >>> _[0].append(1) >>> _ [[1, 1], [1, 1], [1, 1], [1, 1], [1, 1]] >>> [[1] for _ in range(5)] [[1], [1], [1], [1], [1]] >>> _[0].append(1) >>> _ [[1, 1], [1], [1], [1], [1]]
当使用乘法方法时,最终得到一个对同一个列表的n个引用的列表。当你改变它时,你会看到列表中每个元素的变化——因为它们都是一样的。
当使用生成器表达式或列表理解时,将为每个子项创建一个新列表,因此每个项都是不同的值。修改一个只影响那个。
显然,在您的示例中,值是不可变的,所以这无关紧要——但对于不同的情况,或者如果值可能不是不可变的,则值得记住。
要将v,n次添加到l:
l += n * [v]
尝试对列表使用
list.extend
和乘法运算符最一般的答案是使用^{} 和generator expression:
这将添加一个值
n
次。请注意,这将每次评估generate_value()
其他答案可能具有的可变值的单步执行问题:当使用乘法方法时,最终得到一个对同一个列表的n个引用的列表。当你改变它时,你会看到列表中每个元素的变化——因为它们都是一样的。
当使用生成器表达式或列表理解时,将为每个子项创建一个新列表,因此每个项都是不同的值。修改一个只影响那个。
显然,在您的示例中,值是不可变的,所以这无关紧要——但对于不同的情况,或者如果值可能不是不可变的,则值得记住。
要将v,n次添加到l:
相关问题 更多 >
编程相关推荐