2017-07-20 1 views
0

Je suis aux prises avec ce problème, et j'apprécierais que quelqu'un puisse me diriger dans la bonne direction.Problème lors de la saisie d'un tableau 2D pour trier et imprimer par la suite?

Mon problème est le suivant: j'ai besoin de 3 entrées de l'utilisateur pour commencer. Je dois d'abord obtenir les dimensions (M et N) de ma liste 2D de l'utilisateur. Ensuite, je lis dans l'entrée de l'utilisateur pour chaque ligne de la matrice une ligne à la fois. La dernière entrée est l'élément de la liste que je veux trier. Si chaque ligne d'entrée avait 4 pouces de long, je pourrais vouloir le trier par le 2ème int.

Ensuite, dans ma fonction actuelle, je dois trier et imprimer.

J'ai essayé d'utiliser une boucle imbriquée pour initialiser le tableau 2d. Je suspecte que quelque chose ne va pas ici, mais je ne suis pas sûr. Je pense J'ai compris comment le trier. Cependant, j'obtiens une erreur dans ma fonction d'impression qui indique une syntaxe invalide. Mais la syntaxe semble juste à moi.

Ci-dessous mon code:

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 

Toute aide appréciée.

+1

Quelle version de python utilisez-vous? Votre code fonctionne bien dans 2, mais dans 3 vous avez besoin de parenthèses autour de l'entrée de l'impression, ainsi que d'autres changements. –

+0

Avec quel problème avez-vous du mal? – martineau

Répondre

0

Je suppose que ce que vous voulez: (je l'ai imprimé plusieurs cordes afin qu'il devienne clair que les parties font quoi.)

Et la dimension inséré n'a pas été maintenue intentionnellement pour qu'il soit clair que nous ne sommes pas faire n'importe quelle sorte de validation dans le code suivant.

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_ 

Interaction dans la console:

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]] 
0

D'accord avec ce que Craig a commenté @ Sam. Vous avez besoin de parenthèses après l'impression dans Python 3.x pour résoudre le problème d'erreur de syntaxe.

Un autre problème me semble être, vous mappez votre tableau dans une matrice de dimension plus élevée que prévu. Vous pourriez simplement vouloir utiliser row.append (int (entrée())) au lieu de row.append (liste (carte (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 

Hope it helps.