Увеличение количества внутри генератора или другого решения - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь создать 2D-список, получая содержимое множества виджетов ввода, но я не могу понять, как создать список.

Я пытался сделать это как генератор, выполнив

hwklist = [[student, entries[i].get()] for student in student_group_list]

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

Ниже вы можете увидеть мое решение избавиться от генератора, но теперь список перезаписывается при каждой итерации. Я хочу, чтобы он продолжал добавляться.

Примером списка групп студентов будет: student_group_list = ['BERRY-SMITH Finlay', 'EDWARDS Elizabeth', 'GREGORY Isabella', 'Hendley-Jones Annabel', 'LIS Natalia', 'MANNING Sophie', 'RATCLIFFE George', 'BELLAMY Jacob', 'BOUGHTON Grace', 'GARNETT Archie', 'Maruta Kudzai', 'DAVELIS Alexander', 'DENMAN David', 'JENKIN Jonathan', 'LISTER Thomas', 'CLOWES Edward', 'OGG Holly', 'PUGH Billy']

Если вам требуется создать поле для полей ввода, это должно дать представление о том, что яЯ использую:

root = Tk()
entries = []
for f in range (len(student_group_list)
    markentry = Entry(root)
    entries.append(markentry)
    markentry.pack()
    but = Button(root, command = lambda: 2dlist(entries))
    but.pack()

Мой текущий код:

def 2dlist(entries):
    i = 0
    for student in student_group_list:
       hwklist = [[student, entries[i].get()]]
       i = i + 1
    print (hwklist)

Вывод должен выглядеть примерно так: [['BERRY-SMITH Finlay', '3'], ['EDWARDS Elizabeth', '5'], ['GREGORY Isabella', '6'], ['Hendley-Jones Annabel', '1'], ['LIS Natalia', '7'], ['MANNING Sophie', '3'], ['RATCLIFFE George', '8'], ['BELLAMY Jacob', '7']]... и так далее, в зависимости от того, что пользователь ввел в виджеты ввода.

Сейчас я просто получаю [['PUGH Billy', '7']], так как это последний элемент в списке.

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Вы можете использовать zip с пониманием.

hwklist = [[student, entry.get()] for student, entry in zip(student_group_list, entries)]

Или, если вам необходимо использовать обозначение среза, используйте enumerate:

hwklist = [[student, entries[i].get()] for i, student in enumerate(student_group_list)]
0 голосов
/ 21 октября 2019

Функция 2dlist перезаписывает hwklist новым, независимо создаваемым списком для каждого выполнения цикла. Если вы хотите, чтобы функция поддерживала текущий список, вам нужно определить переменную только один раз:

def 2dlist(entries):
    i = 0
    hwklist = []
    for student in student_group_list:
       hwklist.append([student, entries[i].get()])
       i = i + 1
    print (hwklist)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...