输入2D数组以便随后排序和打印时出现问题?

时间:2017-07-20 20:33:41

标签: python list sorting input 2d

我正在努力解决这个问题,如果有人能指出我正确的方向,我将不胜感激。

我的问题是:我需要从用户那里得到3个输入才能开始。我必须首先从用户那里获得我的2D列表的尺寸(M和N)。然后我一次在一行中读取矩阵每行的用户输入。最后一个输入是我要排序的列表中的哪个元素。如果每个输入行的长度为4个整数,我可能希望按第二个int排序。

接下来,在我的实际功能中,我必须对其进行排序并打印出来。

我尝试使用嵌套for循环来初始化2d数组。一世 怀疑这里可能出错了,但我不确定。我认为 我已经弄明白了如何对它进行排序。但是,我收到了错误 打印函数,表示语法无效。但语法似乎正确 我

以下是我的代码:

n,m = map(int,raw_input().split())
my_list = []
for x in range(n):
    row=[]
    for y in range(m):
        row.append(list(map(int,raw_input())))
    my_list.append(row)

k = int(raw_input())

sorted_list=sorted(my_list,key=lambda x:x[k])

for row in sorted_list:
    for val in row:
        print '{:4}'.format(val),
    print

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:0)

我想你想要的是:(我已经打印了几个字符串,以便明确哪些部分正在做什么。)

并未有意维护插入的维度,以明确我们未在以下代码中进行任何类型的验证。

print 'Enter dimension col X row:'
col, row = map(int, raw_input().split())
print 'col: ' + str(col) + '\trow: ' + str(row)

my_list = []
for r in range(row):
    print 'Insert row: ' + str(r)
    my_list.append(map(int, raw_input().split()))
print 'You have inserted: '
print(my_list)

print 'Position by which the array to be sorted: '
index = int(raw_input())
sorted_list = sorted(my_list, key=lambda x: x[index])
print 'Sorted by: index ' + str(index)
print sorted_list


# Checking if all row has >= 4 elements
def elem_more_then_4(my_2d_array):
    for row in my_2d_array:
        if len(row) < 4:
            return False
    return True


if elem_more_then_4(my_list):
    sorted_list_ = sorted(my_list, key=lambda x: x[1])
    print 'Sorted by 2nd element: '
    print sorted_list_

控制台中的互动:

Enter dimension col X row:
5 4
col: 5  row: 4
Insert row: 0
1 2 1 5 4
Insert row: 1
5 1 24 3
Insert row: 2
3 2 1 4 2
Insert row: 3
5 2 1 4 3
You have inserted: 
[[1, 2, 1, 5, 4], [5, 1, 24, 3], [3, 2, 1, 4, 2], [5, 2, 1, 4, 3]]
Position by which the array to be sorted: 
3
Sorted by: index 3
[[5, 1, 24, 3], [3, 2, 1, 4, 2], [5, 2, 1, 4, 3], [1, 2, 1, 5, 4]]
Sorted by 2nd element: 
[[5, 1, 24, 3], [1, 2, 1, 5, 4], [3, 2, 1, 4, 2], [5, 2, 1, 4, 3]]

答案 1 :(得分:0)

同意@Sam Craig所评论的内容。在Python 3.x中打印后需要括号来解决语法错误问题。

在我看来,另一个问题是,您将数组映射到比预期更高的维度矩阵。您可能只想使用row.append(int(input()))而不是row.append(list(map(int,raw_input())))

    n,m = map(int,input().split())
    my_list = []
    for x in range(n):
        row=[]
        for y in range(m):
            row.append(int(input()))
        my_list.append(row)

    k = int(input())

    sorted_list=sorted(my_list,key=lambda x:x[k])

    for row in sorted_list:
        for val in row:
            print('{:4}'.format(val))
    print

希望它有所帮助。