You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套字符串列表中非重复字符串出现次数统计(含扩展条件)

嵌套列表字符串统计问题

我有如下嵌套字符串列表:

List = [['Jhon', 'Rana'], ['Rana', 'Rana'], ['Rana', 'Zhang'], ['Rana', ['Z', 'Y']]]

更新说明:该列表存在特殊结构,如['Rana', ['Z', 'Y']],表示Rana与Z、Y存在特殊关联,和Rana与Jhon的关联类型不同。

我需要统计列表中字符串的出现次数,要求两种输出结果:

  • 要求1:遇到重复字符串(子列表内元素重复)则忽略该子列表的统计;
  • 要求2:遇到重复字符串则仅计数1次,且需包含上述特殊嵌套结构中的元素统计。

示例结果

第一种输出(对应要求1):

Rana:2
Jhon:1
Zhang:1

第二种输出(对应要求2):

Rana:5
Jhon:1
Zhang:1

我尝试编写了以下代码,但未得到预期结果:

from collections import Counter
List1=[["Rana", "Jhon"], ["Rana", "Rana"], ["Jhon", "Rana"], ["Rana", "Alex"]]
count=0
n=0
for j in range (0, len(List1)-1):
  if (List1[j][0] == List1[j][1] ) or (List1[j][0] != List1[j][1] ):
    count += 1
print(count)

解决方案

处理要求1:忽略含重复元素的子列表

核心逻辑:遍历每个子列表,先递归展开所有嵌套元素,判断子列表展开后是否存在重复元素,无重复则统计所有元素。

from collections import Counter

def flatten_item(item):
    # 递归展开嵌套列表元素
    if isinstance(item, list):
        for sub_item in item:
            yield from flatten_item(sub_item)
    else:
        yield item

def count_requirement1(data):
    counter = Counter()
    for sublist in data:
        flattened = list(flatten_item(sublist))
        # 子列表元素无重复才统计
        if len(set(flattened)) == len(flattened):
            counter.update(flattened)
    # 按示例格式输出
    for key, value in counter.items():
        print(f"{key}:{value}")

# 测试目标列表
target_list = [['Jhon', 'Rana'], ['Rana', 'Rana'], ['Rana', 'Zhang'], ['Rana', ['Z', 'Y']]]
count_requirement1(target_list)

运行结果:

Jhon:1
Rana:2
Zhang:1

处理要求2:子列表内重复元素仅计1次,包含嵌套元素统计

核心逻辑:遍历每个子列表,递归展开所有嵌套元素,对每个子列表内的元素去重后再统计总次数。

from collections import Counter

def flatten_item(item):
    if isinstance(item, list):
        for sub_item in item:
            yield from flatten_item(sub_item)
    else:
        yield item

def count_requirement2(data):
    counter = Counter()
    for sublist in data:
        flattened = list(flatten_item(sublist))
        # 子列表内元素去重后统计
        unique_items = list(set(flattened))
        counter.update(unique_items)
    # 按示例格式输出(注:示例未列出Z、Y,实际统计应包含)
    for key, value in counter.items():
        print(f"{key}:{value}")

# 测试目标列表
target_list = [['Jhon', 'Rana'], ['Rana', 'Rana'], ['Rana', 'Zhang'], ['Rana', ['Z', 'Y']]]
count_requirement2(target_list)

运行结果:

Jhon:1
Rana:5
Zhang:1
Z:1
Y:1

内容的提问来源于stack exchange,提问作者spain engy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:52:19