我是编程和Python的新手。在这里,我尝试编写一个代码,该代码从用户接收矩阵(写为列表列表),并将此字符串设置为" real"列表:
def string_to_matrix(arg):
result = []
lines = arg.count("[") - 1
for i in range(lines):
result.append([])
count = 0
i = 2
while i <= len(arg):
if arg[i] == "[":
count += 1
i += 1
elif arg[i].isdigit():
new_number = 0
while arg[i].isdigit():
new_number = 10*new_number + int(arg[i])
i += 1
result[count].append(new_number)
return result
m_1 = string_to_matrix(raw_input("Type your first matrix in format [[x, y, ...],[z, ...],[...], ...]: "))
print m_1
但是在输入矩阵(例如[[1]]或[[1,2],[3,4]])之后,代码永远循环并且永远不会打印任何东西。我做错了什么?
答案 0 :(得分:2)
您的问题不明确,所以无法提供太多帮助,但请仔细阅读以下代码,看看它是否打印出正确的输出。
def string_to_matrix(arg):
result = []
lines = arg.count("[") - 1
for i in range(lines):
result.append([])
count = 0
i = 2
while i < len(arg):
if arg[i] == "[":
count += 1
i=i+1
elif arg[i].isdigit():
new_number = 0
while arg[i].isdigit():
new_number = 10*new_number + int(arg[i])
i=i+1
result[count].append(new_number)
else:
i=i+1
return result
答案 1 :(得分:2)
问题已被搁置,但我会尽力回答,而你应该改进它。阅读how to ask good questions。提出你的问题“出了什么问题”并不是一个正确的问题。
def string_to_matrix(arg):
result = []
lines = arg.count("[") - 1
for i in range(lines):
result.append([])
count = 0
i = 2
while i < len(arg):
if arg[i] == "[":
count += 1
i += 1
elif arg[i].isdigit():
new_number = 0
while arg[i].isdigit():
new_number = 10*new_number + int(arg[i])
i += 1
result[count].append(new_number)
else:
i += 1
return result
m_1 = string_to_matrix(input("Type your first matrix in format [[x, y, ...],[z, ...],[...], ...]: "))
print(m_1)
您的代码有几个问题。用作语句而不是函数(没有大括号)的所有raw_input
和print
的拳头将不适用于您正在使用的python 3。其次,如果你试图在由i个元素组成的列表中找到索引i
的元素,那么你将超出它的范围。请记住,大多数现代编程语言都从0开始迭代列表和数组,这意味着您可能进入的最大元素具有索引i-1
。此外,您不会在每次运行中增加i
计数器,这会导致程序进入无限循环。
上面的代码包含了我必须进行的最小化更改才能正常运行。但是,可以对其进行改进以满足python标准并更有效地使用它提供的所有内容。
尽可能使用列表理解。这样可以使代码简单明了。考虑使用这个:
result = [[] for i in range(lines)]
而不是:
result = []
lines = arg.count("[") - 1
for i in range(lines):
result.append([])
考虑在字符串上使用split
方法。看看这个:
arg ='[[1,2,3],[4,5,6],[7,8,9]]'
打印(ARG [2:-2] .split( '],['))
['1,2,3','4,5,6','7,8,9']
请参阅?在一行中,您将获得一个字符串列表,您可以轻松地将其解析为矩阵的各行。看看现在发生了什么:
>>> l = '1, 2, 3'.split(',')
>>> l
['1', ' 2', ' 3']
>>> l1 = [int(value) for value in l]
>>> l1
[1, 2, 3]
当然你可以添加一些更有意义的名字,检查用户数据的正确性等等,但我想你可以利用我在这里写的例子。
答案 2 :(得分:1)
如果你愿意,这是另一种简单的方法:
def string_to_matrix(arg):
result = []
i=1
while i<len(arg)-1:
if(arg[i]=='['):
i+=1
temp = ""
while(arg[i]!=']'):
temp+=arg[i]
i+=1
temp = temp.split(',')
temp2 = []
for j in temp:
temp2.append(int(j.strip(' ')))
result.append(temp2)
else:
i+=1
return result
m_1 = string_to_matrix(raw_input("Type your first matrix in format [[x, y, ...],[z, ...],[...], ...]: "))
print m_1