Отдельный счетчик для каждого списка в zip_longest () в Python - PullRequest
0 голосов
/ 02 августа 2020

Я использую Python 3.8.3 на Windows 10. Мой код:

from itertools import zip_longest

def uniqify(passedlist):
    seen = set()
    unique = []
    duplicate = []

    for item in passedlist:
        if item not in seen:
            seen.add(item)            
            duplicate.append("")    # add empty string for formatting output
            unique.append(item)
        elif item in seen:
            duplicate.append(item)
            unique.append("")   # add empty string for formatting output

    return unique, duplicate



listFruits = ["apple", "orange", "orange", "banana", "banana", "banana", "peach", "cherry", "cherry"]

listUnique, listDuplicate = uniqify(listFruits)

print(f"Fruits\t\tUnique\t\tDuplicates")
print(f"------\t\t------\t\t----------")

for num, (fruit, unique, duplicate) in enumerate(zip_longest(listFruits, listUnique, listDuplicate), start=1):
    print(f"{num}: {fruit}\t{unique}\t\t{duplicate}")

Текущий выход:

Fruits          Unique          Duplicates
------          ------          ----------
1: apple        apple
2: orange       orange
3: orange                       orange
4: banana       banana
5: banana                       banana
6: banana                       banana
7: peach        peach
8: cherry       cherry
9: cherry                       cherry

Я ищу отдельный счетчик для listUnique и listDuplicate в пределах for l oop.

Желаемый результат:

Fruits          Unique          Duplicates
------          ------          ----------
1: apple        1. apple
2: orange       2. orange
3: orange                       1. orange
4: banana       3. banana
5: banana                       2. banana
6: banana                       3. banana
7: peach        4. peach
8: cherry       5. cherry
9: cherry                       4. cherry

Я искал по всему Inte rnet для это, но я не мог найти решение. В настоящее время я думаю о создании отдельных списков внутри uniqify() с числами и вставке пустых строк для форматирования вывода.

Есть ли способ иметь отдельные счетчики для списков при использовании zip_longest()?

Любые подсказки приветствуются.

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Просто посчитайте вручную, как вы l oop:

uniq_count, dupe_count = 0, 0

for num, (fruit, unique, duplicate) in enumerate(zip_longest(listFruits, listUnique, listDuplicate), start=1):
    if unique:
        uniq_count += 1
        unique = f'{uniq_count}. {unique}'
    if duplicate:
        dupe_count += 1
        duplicate = f'{dupe_count}. {duplicate}'
    print(f"{num}: {fruit}\t{unique}\t\t{duplicate}")
0 голосов
/ 02 августа 2020

пробовали ли вы использовать счетчик и добавлять этот счетчик в качестве префикса в свои списки? вот так

count1 = 0
count2 = 0

    for item in passedlist:
        
        if item not in seen:
            seen.add(item)
            count1 = count1 + 1
            duplicate.append("")
            lol = str(count1) + ". " + str(item)
            unique.append(lol)
            
        elif item in seen:
            count2 = count2 + 1
            lolwa = "    " + str(count2) + ". " + str(item)
            unique.append("")
            duplicate.append(lolwa)

Я знаю, что это не изящное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...