鱼C论坛

 找回密码
 立即注册
查看: 107|回复: 2

关于一个列表查找重复数据的问题

[复制链接]
发表于 2024-11-23 10:59:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一个列表,我要查找他某个字符串重复出现过几次,把这个字符串找出来,并把他的位置都列出来,有多个重复的分别用字典列出来

我的这个就发现了一个问题,这个


def qc(lis):
    new_lst = []
    a=0#第一次写入new列表用
    for i in range(len(lst)):
        flag = True#退出用的标记
        for j in range(len(lst)-i-1):#拿剩下的数据来比对
            if lst[i] == lst[j + i + 1]:#有重复的数据的时候
                fin = {"len": [i+1, i + j + 1+1],
                       "count": 2,
                       "value": lst[i]
                       }
                if a == 1:#不是第一次的就下来
                    for k in range(len(new_lst)):
                        if new_lst[k]['value'] == lst[i]:
                            for m in range(len(new_lst[k]['len'])):
                                if new_lst[k]['len'][m]==i + j + 1:
                                    flag = False
                                    break
                                else:
                                    fin = {"len": new_lst[k]['len']+[i + j + 1],
                                           "count": new_lst[k]['count'] + 1,
                                           "value": new_lst[k]['value']
                                           }
                            if not flag:
                                break
                            del new_lst[k]
                if not flag:
                    break
                new_lst.append(fin)
                a = 1
    return (new_lst)


if __name__ == "__main__":
    lst = ['1111', '2', '1111', '2', '1111', '1111', '1111', '2', '2', '1111', '999', '999', '999', '1111', '2', '1111', '2', '999']
    print(qc(lst))



这个的结果居然是[{'len': [1, 3, 4, 5, 6, 9, 13, 15], 'count': 8, 'value': '1111'}, {'len': [2, 4, 7, 8, 14, 16], 'count': 6, 'value': '2'}, {'len': [11, 12, 17], 'count': 3, 'value': '999'}]


1111出现的应该么有4这个位置,但他居然列出来了,我就想问问到底是哪里出了问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-23 11:16:13 | 显示全部楼层
def qc(lst):
    new_lst = []
    for i in range(len(lst)):
        value = lst[i]
        positions = [j for j in range(i, len(lst)) if lst[j] == value]
        
        if len(positions) > 1:
            entry = {'len': len(positions), 'count': len(positions), 'value': value, 'positions': positions}
            
            # 检查字典中是否已经有这个值存在,以避免重复记录
            if value not in [d['value'] for d in new_lst]:
                new_lst.append(entry)
                
    return new_lst

if __name__ == "__main__":
    lst = ['1111', '2', '999', '1111', '2', '1111', '999', '2', '999']
    print(qc(lst))

在这个代码中,我使用了列表推导式来找到每个字符串的所有位置,并额外添加一个'dpositions'键来列出它们的所有位置。此代码应正确输出各字符串及其所有出现的位置。请注意代码中`if value not in [d['value'] for d in new_lst]:`这一行,它确保每个重复项只被记录一次。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-23 15:04:46 | 显示全部楼层
本帖最后由 jackz007 于 2024-11-23 17:32 编辑
def qc(lis):
    d = []
    for x in sorted(set(lis)):
        d . append({'len' : [y + 1 for y in range(len(lis)) if lis[y] == x] , 'count' : lis . count(x) , 'value' : x})
    return d

lst = ['1111', '2', '1111', '2', '1111', '1111', '1111', '2', '2', '1111', '999', '999', '999', '1111', '2', '1111', '2', '999']
print(qc(lst))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-31 02:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表