我目前正在处理一个问题,需要我采用矩阵/嵌套列表,并将1添加到此列表的每个元素,然后返回新修改的列表。我还必须这样做,以便用户可以输入他们选择的矩阵/嵌套列表。例如,该人将输入: [[1,2,3],[4,5,6]]并且该程序将返回[[2,3,4],[5,6,7]] 到目前为止,我有这段代码:
m = int(input("Enter the number of rows: "))
matrice = []
i=0
while (i<m):
print("Enter the row", i,"(separate each number by a space)")
rang = [int(val) for val in input().split()]
matrice.append(rang)
i = i + 1
def add(a):
res = []
for i in range(len(a)):
row=[]
for j in range(len(a[0])):
row.append(a[i][j]+1)
res.append(row)
return res
此代码仅适用于完美矩阵。我的问题是,每当行长度不同时,它就会给我一个错误。例如,如果您要输入列表[[1,2,3,4],[4,5,6]]则不起作用。我想知道如何继续做这个问题。另外,如果可能的话,我宁愿不使用numpy。预先感谢您的帮助。
答案 0 :(得分:4)
您可以非常简单地使用列表推导来执行此操作:
x = [[1,2,3,4],[4,5,6]]
[[z+1 for z in y] for y in x]
# [[2, 3, 4, 5], [5, 6, 7]]
但是,如果“矩阵”非常大,我建议您使用numpy
中的矩阵对象。
答案 1 :(得分:2)
怎么样:
m = [[5, 7, 9, 3], [10, 8, 2, 9], [11, 14, 6, 5]]
m2 = [[v+1 for v in r] for r in m]
print m
print m2
答案 2 :(得分:1)
而不是使用len(a [0])使用len(a [i])它是当前行的长度
def add(a):
res = []
for i in range(len(a)):
row=[]
for j in range(len(a[i])):
row.append(a[i][j]+1)
res.append(row)
return res
答案 3 :(得分:0)
对于任何嵌套的数字列表:
test_data = [
[1,2,3]
,[2,4]
,5
,[6,7,[8,9]]
]
import types
import numbers
def inc_el(list_or_num):
if isinstance(list_or_num, numbers.Number):
return list_or_num +1
elif type(list_or_num) == types.ListType:
return map(inc_el, list_or_num)
print map(inc_el, test_data)