Привет, я новичок в python, и у меня есть вопрос, на который я не могу найти ответа.
хорошо, представьте, что у нас есть 5 учеников, и мы хотим получить их баллы за 3 урока (например, математика, естествознание, география), и у нас есть пустые списки, названные этими уроками, я хочу знать, как мы можем ввести их баллы в эти списки, используя один цикл, а не написание кода один за другим для этих списков. оценивает входные данные как
80 90 95 40 70
70 50 60 50 50
80 90 90 80 80
это наши списки:
math = science = geography =[]
и я знаю, как вводить несколько переменных:
[int(x) for x in input().split()]
я пытался использовать «для», как показано ниже, но это не работает, потому что дает «i» равное количество списков, но не копирует результаты в список.
i = []
for i in math, science, geography:
i = [int(x) for x in input().split()]
так что, пожалуйста, помогите мне, если вы можете, спасибо.
d = {}
for i in ['math', 'science', 'geography']:
d[i] = [int(x) for x in input().split()]
Вы можете просто сохранить его в словаре, где словарные ключи являются предметами, а элементы — списками, содержащими оценки, полученные учащимися.
{'math': [1, 2, 3, 4, 5], 'science': [6, 7, 8, 9, 0], 'geography': [1, 2, 3, 4, 5]}
ИЛИ
Если у вас подготовлено 3 отдельных списка и вы хотите заполнить их, вы можете просто сделать это
subject_lists = []
for i in ['math', 'science', 'geography']:
subject_lists.append([int(x) for x in input().split()])
Теперь subject_lists
содержит все списки по порядку. Если у вас есть какой-то порядок, указанный где-то, что первый список предназначен для предмета 1, а второй для предмета 2, вы можете легко его использовать.
subject_map = {
'math':0,
'science':1,
'geo':2
}
Так что теперь, если вам нужно получить доступ к предмету math
, чтобы получить баллы, полученные учениками, вы можете просто думать так
subject_index = subject_map['math']
math_scores = subject_lists[subject_index ]
конечно, это хороший способ, но я хочу скопировать результаты в подготовленные пустые списки, мой вопрос - всего лишь пример, чтобы найти эту возможную функцию. спасибо кстати
@MohsenSalimi Проверьте ответ.
Не совсем понятно, как заставить specific_list
указывать на тот же список, что и, например. math
только на основе строки 'math'
из вашего ответа.
@matszwecja В принципе, это можно сделать разными способами, и я подумал, что это не главная деталь. Поскольку основная часть ОП отсутствовала, это обновление списка. Одним из способов было бы просто перечислить список и обработать оттуда или просто перебрать ссылки на список.
я считаю, что таким образом входные данные добавляются к Specific_list! я не знаю, понимаю ли я вторую часть вашего ответа или нет, но я хочу, чтобы баллы добавлялись к списку математики, географии и естественных наук, и я не хочу писать это 3 раза ... представьте, если бы их было 100 списков!
@MohsenSalimi Проверьте ответ сейчас. Это вернет список списка, и вам не нужно ничего жестко кодировать
@matszwecja Проверьте ответ. Я немного прояснил ситуацию. Спасибо за предыдущий отзыв.
@user2736738 user2736738 слишком сложно, но теперь работает, так что отрицательный голос удален.
@matszwecja Только представьте, если предметов 10-25, в вашем решении им пришлось бы написать 20 назначений списков. В этом случае, как только у вас есть словарь, вот и все. (Вы можете легко получить такие диски из баз данных). Кстати, я не DV ваше решение (просто для ясности). Удивительно, но Op любит ваше решение, но оно точно такое же, как и мое предыдущее решение .... странное поведение SO.
@ user2736738 Я согласен, что словарь, вероятно, был бы лучше, но OP сказал, что ему нужно поместить результаты «в подготовленные пустые списки», поэтому я выполнил это требование.
2 проблемы:
1.
math = science = geography = []
— это присвоит та же ссылка всем переменным. Это означает, что каждое изменение, которое вы делаете в одном из списков, будет отражено в других.
2.
for i in math, science, geography:
i = [int(x) for x in input().split()]
Здесь вы меняете ссылку i
, когда вы назначаете ей новый список, что делает его больше не тем же самым, что и каждый из math, science, geography
.
Вам необходимо отредактировать каждый из заданных списков на месте.
Имея в виду эти две вещи, если вы перепишете свой код таким образом, он будет работать:
math = []
science = []
geography = []
for i in math, science, geography:
i.extend([int(x) for x in input().split()])
Возможно, вам стоит попробовать изучить словарь в Python. Это было бы более подходящим для этого варианта использования.