Как выделить строки и напечатать в списке питона - PullRequest
0 голосов
/ 08 сентября 2018

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

1 f
2 f
3 f
4 g
5 g
6 g

и я хочу напечатать первые две строки f и g, как:

1 f
2 f
4 g
5 g

есть идеи, как к этому подойти?

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Вы можете рассмотреть возможность группировки вашего списка. Пример:

l = [['1', 'f'], ['2', 'f'], ['3', 'f'], ['4', 'g'], ['5', 'g'], ['6', 'g']] 

Чтобы сгруппировать список, используйте клавишу. В этом случае ключ будет вторым значением каждого элемента списка, поэтому x[1]:

from itertools import groupby
for _, g in groupby(l, lambda x: x[1]):
    print(list(g)[:2])

Разделите каждую группу, чтобы распечатать только первые два элемента, list(g)[:2].

Выход:

[['1', 'f'], ['2', 'f']]
[['4', 'g'], ['5', 'g']]

Примечание: это похоже на uniq в оболочке. И это зависит или ключевые значения сортируются. Возможно, вам придется отсортировать данные перед использованием этого подхода.

0 голосов
/ 08 сентября 2018

Добавили список dict с elem для печати вместе с клавишей count Просто увеличьте значение count, чтобы убедиться, что печатаются не более max_limit элементов.

myList = ['1 f', '2 f', '3 f', '4 g', '5 g', '6 g']
elems_to_print = [{'elem': 'f', 'count': 0}, {'elem': 'g', 'count': 0}]
max_limit = 2

for myL in myList:
    for elem in elems_to_print:
        if elem['elem'] in myL and elem['count'] < max_limit:
            #Elem found
            elem['count'] += 1
            print("%s"%(myL))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...