Как разрезать список и хранить как несколько списков на основе условия python - PullRequest
0 голосов
/ 17 июня 2020

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

my_list = ['pdf', 'csv', 'csv','csv','txt','txt','txt','txt','pdf','pdf','csv','txt','txt','pdf', 'csv', 'csv','pdf','csv','txt','txt' ]

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

, поэтому окончательные результаты выглядят как

lst_1=['pdf', 'csv','txt']    
lst_2=['pdf', 'csv','txt']
lst_3=['pdf', 'csv']
lst_4=['pdf', 'csv','txt']
.
.
so on...

У меня есть что-то вроде ниже, которое дает ошибку.

arrays = [[my_list[0]]]
for i in range(1, len(my_list)):
    if 'pdf','csv','txt' in i:
        arrays[len(arrays)-1].append(my_list[i])
print(sorted(set(arrays)))

Кто-нибудь может помочь мне решить эту проблему, пожалуйста?

Спасибо!

Ответы [ 3 ]

1 голос
/ 17 июня 2020

попробуйте это,

my_list = ['pdf', 'csv', 'csv','csv','txt','txt','txt','txt','pdf','pdf','csv','txt','txt','pdf', 'csv', 'csv','pdf','csv','txt','txt' ]

counter = [0,0,0]
counter[0]=my_list.count('pdf')
counter[1]=my_list.count('csv')
counter[2]=my_list.count('txt')

l2=[]
lists = []
pdf,csv,txt=counter

for i in range(max(counter)):

    l2=[]
    if pdf>=0:
        l2.append('pdf')
        pdf-=1
    if csv>=0:
        l2.append('csv')
        csv-=1
    if txt>=0:
        l2.append('txt')
        txt-=1

    lists.append(l2)

print(lists)

вывод:

[['pdf', 'csv', 'txt'], ['pdf', 'csv', 'txt'], ['pdf', 'csv', 'txt'], ['pdf', 'csv', 'txt'], ['pdf', 'csv', 'txt'], ['pdf', 'csv', 'txt'], ['csv', 'txt'], ['csv', 'txt']]

надеюсь, это вам поможет!

0 голосов
/ 17 июня 2020

Вы можете использовать простой словарь для подсчета.

myDict = dict()
for s in my_list:
    if s in myDict:
       myDict[s] += 1
    else:
       myDict[s] = 1
lists = [['pdf', 'csv', 'txt'] for i in range(min(myDict.values()))]

Приведенный выше код подсчитывает количество появлений каждого элемента в my_list и создает другой список списка. Вам может потребоваться небольшая модификация, чтобы получить желаемый результат, поскольку неясно, каким именно должен быть результат

0 голосов
/ 17 июня 2020

Вы можете просто подсчитать количество вхождений, а затем воссоздать список, если он вам нужен.

counter = [0,0,0]
for i in my_list:
    if i == "pdf":
        counter[0] += 1
    elif i == "csv":
        counter[1] += 1
    elif i == "txt":
        counter[1] += 1

Затем, когда вы узнаете, сколько из них, вы можете l oop по самой низкой подсчитанной строке и создавать списки.

lists = [['pdf', 'csv','txt'] for i in min(counter)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...