список печати и вложенный список рядом - PullRequest
1 голос
/ 21 июня 2020

Прямо к вопросу. два списка. один вложенный, а другой обычный.

a = ['Name', 'Age', 'Class', 'Marks', 'Grade']
b = [['n1', 12, '1st', 40, 'b'],
     ['n2', 14, '1st', 70, 'a'],
     ['n3', 16, '2nd', 90, 's'],
     ['n4', 14, '3rd', 40, 'b'],
     ['n5', 12, '1st', 50, 'b'],
     ['n6', 18, '3rd', 30, 'c'],
     ['n7', 11, '1st', 80, 'a'],
     ['n8', 10, '2nd', 20, 'd']]

Как напечатать два списка выше (бок о бок и без, []).

Name   : n1
Age    : 12
Class  : 1st
Marks  : 40
Grade  : b

аналогично, это нужно напечатать таким же образом для всех студентов.

def details():
    for i in b:
        for j in i:
            for k in a:

тогда я застрял там. Я пробовал смешивать zip (a, b) с enumerate, но не работал. Поскольку я новичок в Python, я не могу понять. Пожалуйста, помогите с этим. Заранее спасибо.

Ответы [ 5 ]

3 голосов
/ 21 июня 2020

Просто l oop поверх списка списков b и заархивируйте каждый внутренний список ключами из a:

a = ['Name', 'Age', 'Class', 'Marks', 'Grade']
b = [['n1', 12, '1st', 40, 'b'],
     ['n2', 14, '1st', 70, 'a'],
     ['n3', 16, '2nd', 90, 's'],
     ['n4', 14, '3rd', 40, 'b'],
     ['n5', 12, '1st', 50, 'b'],
     ['n6', 18, '3rd', 30, 'c'],
     ['n7', 11, '1st', 80, 'a'],
     ['n8', 10, '2nd', 20, 'd']]

for inner in b:
     for key, value in zip(a, inner):
          print(f"{key:<5} : {value}")
     print()

Вывод:

Name  : n1
Age   : 12
Class : 1st
Marks : 40
Grade : b

Name  : n2
Age   : 14
Class : 1st
Marks : 70
Grade : a

Name  : n3
Age   : 16
Class : 2nd
Marks : 90
Grade : s

Name  : n4
Age   : 14
Class : 3rd
Marks : 40
Grade : b

Name  : n5
Age   : 12
Class : 1st
Marks : 50
Grade : b

Name  : n6
Age   : 18
Class : 3rd
Marks : 30
Grade : c

Name  : n7
Age   : 11
Class : 1st
Marks : 80
Grade : a

Name  : n8
Age   : 10
Class : 2nd
Marks : 20
Grade : d

См. строковый формат мини-документации на языке для форматирования вашей строки пробелами.

1 голос
/ 21 июня 2020

Вы можете попробовать что-то подобное с помощью enumerate:

for i in b:
    for idx,j in enumerate(i):
        print("{:<5}".format(a[idx]),":",j)
0 голосов
/ 21 июня 2020

Простой Pythoni c - однострочный, с элегантным дисплеем:

print(*[f"{a[x]:6}: {z}" for i in b for x,z in enumerate(i)], sep='\n')
0 голосов
/ 21 июня 2020

Вот что вы можете сделать:

a = ['Name', 'Age', 'Class', 'Marks', 'Grade']
b = [['n1', 12, '1st', 40, 'b'],
     ['n2', 14, '1st', 70, 'a'],
     ['n3', 16, '2nd', 90, 's'],
     ['n4', 14, '3rd', 40, 'b'],
     ['n5', 12, '1st', 50, 'b'],
     ['n6', 18, '3rd', 30, 'c'],
     ['n7', 11, '1st', 80, 'a'],
     ['n8', 10, '2nd', 20, 'd']]

for lst in b:
    for t in [n for n in zip(a,lst)]: # For tuple in the list of tuples generated by zip()
        print(f"{t[0].ljust(7)}: {t[1]}") # Print the 0 index (first element) of the tuple with ljust (padding) of 7 spaces, followed by a colon, space, and the 1 index (second element) of the tuple
    print('------------')

Вывод:

Name   : n1
Age    : 12
Class  : 1st
Marks  : 40
Grade  : b
------------
Name   : n2
Age    : 14
Class  : 1st
Marks  : 70
Grade  : a
------------
Name   : n3
Age    : 16
Class  : 2nd
Marks  : 90
Grade  : s
------------
Name   : n4
Age    : 14
Class  : 3rd
Marks  : 40
Grade  : b
------------
Name   : n5
Age    : 12
Class  : 1st
Marks  : 50
Grade  : b
------------
Name   : n6
Age    : 18
Class  : 3rd
Marks  : 30
Grade  : c
------------
Name   : n7
Age    : 11
Class  : 1st
Marks  : 80
Grade  : a
------------
Name   : n8
Age    : 10
Class  : 2nd
Marks  : 20
Grade  : d
------------
0 голосов
/ 21 июня 2020

Вы можете получить доступ просто так

for i in b:
    for j in range(len(a)):
        print(a[j]+" : "+str(i[j]))
...