#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']