首页 > 解决方案 > Python 中 zip_longest() 中每个列表的单独计数器

问题描述

我在 Windows 10 上使用 Python 3.8.3。我的代码:

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中有一个单独的计数器。listDuplicatefor

期望的输出:

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

我已经在互联网上搜索了这个,但我找不到解决方案。我目前正在考虑只在 , 中创建单独的列表uniqify(),并插入空字符串以格式化输出。

有没有办法在使用时为列表设置单独的计数器zip_longest()

任何提示将不胜感激。

标签: pythonpython-3.xlist

解决方案


只需在循环时手动计数:

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}")

推荐阅读