Как получить доступ к определенному внутреннему списку во вложенном списке

#python #list

#python #Список

Вопрос:

У меня есть вложенный список, который не разделяется. Нравится:

 list1 = [['New York; 4545; 45; 545; 545'],
         ['Berlin; 545; 454; 5645'],
         ['Paris; 5;;; 112']]
 

Мой список содержит тысячи элементов, подобных приведенным выше. Я хочу получить доступ к определенному списку. например, список, содержащий ‘Paris’, и создайте из него другой список.

Кстати, чтобы прояснить проблему; в списке тысячи записей, и я не знаю индекс списка, который содержит париж.

вывод может выглядеть:

 list2 = ['Paris', 5, 112]
 

у кого-нибудь есть идея?

Комментарии:

1. Похоже, это данные из файла CSV — не лучше ли вам манипулировать ими с csv помощью модуля или pandas?

Ответ №1:

Чтобы найти подсписок, содержащий определенное значение, вы можете сделать это.

 list1 = [['New York; 4545; 45; 545; 545'],
         ['Berlin; 545; 454; 5645'],
         ['Paris; 5;;; 112']]


list2 = [i for i in list1 if i[0].split(';')[0] == 'Paris']
 

Ответ №2:

Попробуйте это.

 [element for element in list1 if 'Paris' in element[0]]
 

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

Ответ №3:

Довольно простой способ сделать это — использовать pandas , если вы согласны с использованием внешних библиотек.

Это даст вам все индексы, в которых присутствует ‘Paris’, независимо от позиции.

Учитывая, что размер списков огромен, поиск будет быстрее при использовании pandas .

 import pandas as pd
temp_df=pd.DataFrame(list1)
indices_with_paris=list(temp_df[temp_df.loc[:,0].astype(str).str.contains('Paris')==True].index)
 

Чтобы получить значения, в которых присутствует ‘Paris’

 for indices in indices_with_paris:
   print(list1[indices][0].split(';'))
 

Вывод

 ['Paris', ' 5', '', '', ' 112']
 

Ответ №4:

Это зависит от нескольких вещей. Чтобы получить доступ к записи в списке, вы хотите использовать индекс этой записи

Итак, если у вас есть свой list1, вы получаете доступ к «Paris», позвонив list1[2]

(индексы начинаются с 0)

Если вы хотите получить к нему доступ не по индексу, а по «имени», вам следует либо изменить тип данных на словарь и использовать «paris» в качестве ключа, либо вам нужно написать функцию «search», которая перебирает ваш список

Функция поиска может выглядеть следующим образом:

 def search(cityname,listvar):
    for entry in listvar:
        if entry[0][:len(cityname)]==cityname:
            return entry[0].split(";")
 

Комментарии:

1. гм .. я не мог четко объяснить. в моем вложенном списке тысячи списков. и я не знаю, какой из них содержит париж 🙂

2. Есть ли причина, по которой ваши «вложенные» списки содержат только 1 запись? Весь ваш вложенный список — это списки с одной записью, которая содержит строку. С таким же успехом вы могли бы иметь list1 = ['New York; 4545; 45; 545; 545','Berlin; 545; 454; 5645','Paris; 5;;; 112']