Отфильтруйте список списков в Python по значению элемента

#python #list #filter

Вопрос:

Предположим, у меня есть список lines , в котором каждый элемент является списком

 ['2015', 'Friday', 9.94, 0.0]
['2015', 'Tuesday', 10.54, 0.002615]
['2015', 'Wednesday', 9.86, -0.001531]
['2016', 'Monday', 10.41, 0.007841]
['2016', 'Thursday', 11.51, 0.006415]
['2017', 'Tuesday', 8.74, -0.003711]
['2017', 'Friday', 12.62, 0.008516]
 

Как бы я отфильтровал список, если бы, например, я хотел получить все элементы, где первый элемент списка-2016, а второй элемент-понедельник? Думайте об этом как о фильтрации фрейма данных pandas по значениям столбцов, но с использованием списка списков.

Ответ №1:

Просто используйте понимание списка с условием:

 >>> [x for x in lst if x[0] == 2016 and x[1] == "Monday"]
[[2016, 'Monday', 10.41, 0.007841]]
 

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

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

2. @Вадим, почему в 2016 году должны быть цитаты?в вашем вопросе их нет…

3. @MuhdMairaj мой плохой, я не копировал и не вставлял из spyder. Я забыл добавить их, поэтому отредактировал вопрос

Ответ №2:

     lines = [
    [2015, "Friday", 9.94, 0.0],
    [2015, "Tuesday", 10.54, 0.002615],
    [2015, "Wednesday", 9.86, -0.001531],
    [2016, "Monday", 10.41, 0.007841],
    [2016, "Thursday", 11.51, 0.006415],
    [2017, "Tuesday", 8.74, -0.003711],
    [2017, "Friday", 12.62, 0.008516]
]
requiredLine = [line for line in lines if line[0] == 2016 and line[1] == "Monday"]
print(requiredLine)
 

Использование понимания списка, содержащего условные операторы.

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

1. О! Ответ был уже там до некоторого времени.

Ответ №3:

Я бы отделил логику выбора от следующей фильтрации:

 def func(x): return x[0] == 2016 and x[1] == "Monday"

list(filter(func, your_data))