#python #python-3.5
#python #python-3.5
Вопрос:
У меня есть список, который изначально пуст, но пользователь добавляет подсписки в список.
Затем мне нужно выполнить поиск индекса конкретного подсписка, используя первые 2 элемента подсписка. это работает, если первые два элемента являются единственными двумя элементами, но не тогда, когда пользователь добавил больше деталей в подсписок.
Мне нужен способ поиска индекса подсписка, используя только первые два элемента. Есть идеи?
database=[]
fn=input("Enter the students first name:")
sn=input("Please enter the students surname:")
rr=(any(fn and sn in i for i in database))
if rr==True:
print("true")
pos=(database.index([fn, sn]))
Комментарии:
1. Пожалуйста, укажите входные данные и ожидаемый результат.
2. Я предлагаю использовать namedtuples или dictionary для хранения такого рода данных. Со списками будет сложно обращаться, потому что они не являются подходящей структурой данных для содержимого, предназначенного для случайного (а не последовательного / итеративного) доступа.
Ответ №1:
вам нужно найти конкретный подсписк, чтобы передать его index
функции, например, изменив средство проверки, чтобы возвращать подсписк
for sublist in database:
if fn in sublist and sn in sublist:
index_sublist = sublist
break
затем выполните поиск индекса по найденному подсписку
pos = (database.index(index_sublist))
кстати, проверьте это
fn and sn in i for i in database
в этом случае вы проверяете, существует ли fn и sn в i. Попробуйте
fn in i and sn in i for i in database
кроме того, существуют более эффективные по времени способы хранения значений вашей задачи, например, в dict, которые имеют tuple(sublist[:2])
в качестве ключей и подсписки в качестве значений
Ответ №2:
переключить:
pos=(database.index([fn, sn]))
с помощью этого:
pos=[i for i in range(len(database)) if database[i][0]==sn and database[i][1]==fn]
Это возвращает позиции всех подсписков в списке, для которых первый элемент является fn
, а второй элемент является sn