gpt4 book ai didi

python - Python 中的随机大小列表生成

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:49 25 4
gpt4 key购买 nike

我想在 Python 中创建一个随机大小列表。

这是我的代码:

row_num = int(input('Please enter matrix row number:'))
colum_num = int(input('please enter matrix column number:'))
a = [[0]*row_num]*colum_num
print("Please enter matrix: ")
for i in range(colum_num):
for j in range(row_num):
a[i][j]=int(input())

print(a)

例如,我想生成一个 2*3 矩阵,这是我的结果:

Please enter matrix row number:2
please enter matrix column number:3
Please enter matrix:
1
2
3
4
5
6
[[5, 6], [5, 6], [5, 6]]

我希望结果是 [[1,2],[3,4],[5,6]]

为什么结果是最后一个元素?

最佳答案

您的代码中的问题在于,当您执行类似操作时:

a = [[0] * row_num] * colum_num

您创建 colum_num 个链接以列出 [[0] * row_num]。当您更改其中一个列表(在您的 for 中)时,其他列表也会更改。您可以运行以下代码以了解我的意思

a = [1,2,3]
b = [a] * 3
print(b)
a[1] = 10
print(b)

输出将是 [[1, 2, 3], [1, 2, 3], [1, 2, 3]][[1, 10, 3 ], [1, 10, 3], [1, 10, 3]] 因为 b 只是指向 a 的 3 个链接。

有多种方法可以创建新列表而不是副本,例如索引完整列表

b = [a[:]] * 3 

或者使用复制模块

import copy
b = [copy.copy(a)] * 3

或者使用生成器表达式创建多个相似的列表(全是 0),但对象不同,如 sgbirch 建议的那样。

a = [[0 for x in range(column_num)] for y in range(row_num)]

顺便说一下,创建一个充满 0 的列表是没有意义的,你可以这样做:

row_num = int(input('Please enter matrix row number:'))
column_num = int(input('please enter matrix column number:'))
a = [[int(input()) for x in range(column_num)] for y in range(row_num)]

用户逐行输入矩阵可能也更简单。

a = [[int(x) for x in input('Input row № {} ({} numbers): '.format(y + 1, column_num)).split()] for y in range(row_num)]

关于python - Python 中的随机大小列表生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32901879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com