我尝试了很多方法,但是如何输入类似这样的矩阵
var str = "12312512341231";
var sum = str.Sum(x => x - '0');
我的方法如下所示:
2,3;2,4;2,1;3,5;3,4;4,2
4,2;4,1;3,1;3,6;4,4;1,4
1,2;1,3;4,5;5,5;2,1;1,5
6,2;6,1;2,2;5,6;2,6;2,5
3,2;3,3;6,5;6,6;6,3;6,4
5,3;5,4;5,1;5,2;4,6;1,6
其中n是n乘n的矩阵的阶数。我需要在每个像元中输入另一个像元的坐标。例如:在(1,1)我们有(2,3),那么它应该将我重定向到单元格row = 2和column = 3的坐标是(3,1)等等,直到满足结束条件。我在这里使用基于1的索引。当我像上面那样做时,它以'2,3'作为字符串,而当我使用matrix=[[j for j in input().split(';')]for i in range(n)]
时,会出现错误,表明2,3不能是整数。任何人都可以想出办法吗?
答案 0 :(得分:0)
我的示例将根据数据制作一个6x6的矩阵。每个单元格包含一对数字:
data = """
2,3;2,4;2,1;3,5;3,4;4,2
4,2;4,1;3,1;3,6;4,4;1,4
1,2;1,3;4,5;5,5;2,1;1,5
6,2;6,1;2,2;5,6;2,6;2,5
3,2;3,3;6,5;6,6;6,3;6,4
5,3;5,4;5,1;5,2;4,6;1,6"""
import re
from pprint import pprint
groups = re.findall(r'(\d+),(\d+)', data)
pprint([[tuple(map(int, groups[j*6 + i])) for i in range(6)] for j in range(6)])
打印:
[[(2, 3), (2, 4), (2, 1), (3, 5), (3, 4), (4, 2)],
[(4, 2), (4, 1), (3, 1), (3, 6), (4, 4), (1, 4)],
[(1, 2), (1, 3), (4, 5), (5, 5), (2, 1), (1, 5)],
[(6, 2), (6, 1), (2, 2), (5, 6), (2, 6), (2, 5)],
[(3, 2), (3, 3), (6, 5), (6, 6), (6, 3), (6, 4)],
[(5, 3), (5, 4), (5, 1), (5, 2), (4, 6), (1, 6)]]
答案 1 :(得分:0)
正如@RafaelC所提到的,不清楚您想要int(“ 2,3”)返回什么。我认为,尽管您想要执行以下操作:
matrix=[[j.split(',') for j in input().split(';')]for i in range(2)]
如果您确实希望每个对都是一个元组,则可以将j.split(',')
包裹在tuple
中。
答案 2 :(得分:0)
据我了解,您想填充从(1,1)开始的矩阵,并跳转到此位置上写的下一个位置。应该这样做:
import re
from pprint import pprint
data = """
2,3;2,4;2,1;3,5;3,4;4,2
4,2;4,1;3,1;3,6;4,4;1,4
1,2;1,3;4,5;5,5;2,1;1,5
6,2;6,1;2,2;5,6;2,6;2,5
3,2;3,3;6,5;6,6;6,3;6,4
5,3;5,4;5,1;5,2;4,6;1,6
"""
jumps = [(int(i)-1, int(j)-1) for i, j in re.findall(r'(\d+),(\d+)', data)]
array = [ [0]*6 for _ in range(6)]
i = j = 0
for _ in range(100): # There is no end condition define, will do 100 iterations.
array[j][i] = input()
i, j = jumps[j*6+i]
如果仅输入索引进行36次迭代,您将得到如下所示:
[[ 1, 20, 0, 28, 25, 22],
[ 4, 27, 0, 23, 0, 0],
[ 3, 2, 33, 0, 19, 0],
[ 0, 21, 26, 0, 0, 31],
[ 0, 32, 29, 34, 0, 30],
[36, 0, 24, 0, 0, 35]]
您可以看到以下循环:
(3, 5) -> (6, 5) -> (6, 4) -> (2, 5) ->
(3, 3) -> (4, 5) -> (6, 6) -> (1, 6) ->
(5, 3) -> (2, 1) -> (2, 4) -> (6, 1) ->
(4, 2) -> (3, 6) -> (5, 1) -> (3, 4) ->
(2, 2) -> (4, 1) -> (3, 5)
答案 3 :(得分:0)
ast模块似乎相对未知,但是可能会为您提供所需的内容。诚然,我不是100%地确定我了解您想要什么,但是以下代码可能会提供解决方案,或者至少会有所帮助。
import ast
def main():
inp_matrix = \
"""2,3;2,4;2,1;3,5;3,4;4,2
4,2;4,1;3,1;3,6;4,4;1,4
1,2;1,3;4,5;5,5;2,1;1,5
6,2;6,1;2,2;5,6;2,6;2,5
3,2;3,3;6,5;6,6;6,3;6,4
5,3;5,4;5,1;5,2;4,6;1,6"""
lines = inp_matrix.split('\n')
out_matrix = []
for ln in lines:
matrix_line = [ast.literal_eval(e) for e in ln.split(';')]
out_matrix.append(matrix_line)
for el in out_matrix:
print el
return 0
if __name__ == "__main__":
exit(main())
输出为:
[(2,3),(2,4),(2,1),(3,5),(3,4),(4,2)]
[(4,2),(4,1),(3,1),(3,6),(4,4),(1,4)]
[(1,2),(1,3),(4,5),(5,5),(2,1),(1,5)]
[(6,2),(6,1),(2,2),(5,6),(2,6),(2,5)]
[(3,2),(3,3),(6,5),(6,6),(6,3),(6,4)]
[(5,3),(5,4),(5,1),(5,2),(4,6),(1,6)]