#python #list #if-statement #tuples
Вопрос:
У меня есть метод if, чтобы проверить, является ли значение индекса [1] внутри кортежа меньше или равно 255. Когда я передаю этот метод одному кортежу внутри списка, он работает, например [(0, 323)], но когда я передаю [(0, 323), (1, 1)] это не так.
if [i for i in a if i[1] <= 255]:
print("a")
else:
print("b")
Пример, если мои значения [(0, 323)], он правильно выводит b, но когда они меняются на несколько кортежей в одном списке [(0, 323), (1, 1)] он просто печатает, что неверно. Какие-нибудь предложения, пожалуйста?
Комментарии:
1. просто используйте, если[1][1] :
2. что вы хотите проверить — что все элементы индекса 1 меньше 255 или что по крайней мере один меньше 255?
3. Что только во всех индексах значения не будут превышать 255, чтобы этот метод был истинным, например, выведите «a», если они меньше или равны 255. @PavanKumarTS , уже пробовал это, и это дает мне ошибку «int», объект не подлежит подписке
Ответ №1:
Пример, если мои значения [(0, 323)], он правильно выводит b, но когда они меняются на несколько кортежей в одном списке [(0, 323), (1, 1)] он просто печатает, что неверно. Какие-нибудь предложения, пожалуйста?
Поведение полностью соответствует кодексу:
[i for i in a if i[1] <= 255]
вернет список всех кортежей, в которых второй элемент меньше 255. Для вашего второго тестового примера он возвращается [(1, 1)]
.
Это затем интерпретируется в логическом контексте, в коллекциях Python, как правило, «истинно», если коллекция непустая и «ложно» пуста. Список из одного элемента непуст, следовательно, правдив, следовательно, «а».
Если вы хотите, чтобы это прошло, когда все кортежи будут иметь второе значение меньше 255, тогда это задание… функция all
.
# transform the comprehension because `all([])` is `True` which seems
# undesirable here
if all(thing <= 255 for _, thing in a):
print("a")
else:
print("b")
Кстати, i
в разговорной речи это показатель, так как здесь этого не i
следует избегать. То же самое с j
.
Для обобщающего элемента предпочтительнее e
или лучше укажите название , которое на самом деле объясняет, что это за вещь.
Комментарии:
1. Функция » Все » спасла день, спасибо
Ответ №2:
В настоящее время вы проверяете, есть ли в списке кортеж, второй элемент которого меньше или равен единице. Если это то, чего ты хочешь, any()
было бы лучше:
if any(each for each in a if each[1] <= 255):
print("Yup, at least one tuple matched")
else:
print("Nope, not a single one")
Если вы хотите проверить, все ли кортежи совпадают, вы используете all()
.
Если вы хотите проверить каждый элемент, вам нужно пройтись по списку:
for each in a:
if each[1] <= 255:
print(f"{each} matches")
else:
print(f"{each} does not match")