计数字符串出现次数/枚举lis中的出现次数

2024-04-19 17:39:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要更新列表如下所示

l=['hey','alan','hey','hey','hey','alan']

结果一定是

l=['hey','alan','hey1','hey2','hey3','alan1']

我的代码:

test = int(input())
texts=[]
for i in range(test):
    texts.append(input())
res=[]
for i in texts:
    if i in res:
       # print(i)
        c=res.count(i)
        o=i+str(c)
        res.append(o)
    else:
        res.append(i)

print(res)

实际输出:

['hey', 'hey1', 'hey1']

预期产量:

['hey', 'hey1', 'hey2']

Tags: intest列表forinputresprinthey
3条回答
  • 您需要将原始字符串添加到res以保持计数。你知道吗
  • 我建议为此创建另一个数组。cnt。你知道吗
  • 因为在第二次迭代hey之后。您将拥有res = ['hey', 'hey1'],并且在下一个hey中,res中的hey计数仍然保持1。你知道吗
test = int(input())
texts=[]
for i in range(test):
    texts.append(input())
res=[]
cnt=[]
for i in texts:
    if i in res:
       # print(i)
        c=cnt.count(i)
        o=i+str(c)
        res.append(o)
        cnt.append(i)
    else:
        res.append(i)
        cnt.append(i)

print(res)

附言:你的方法不是完成任务的最佳方法。我建议对此使用Counter。你知道吗

from collections import Counter
test = int(input())
texts=[]
for i in range(test):
    texts.append(input())
c = Counter(texts)
res = []
for x,y in c.items():
    for i in range(y):
        res.append(x if i==0 else x+str(i))

print(res)
  • 输出

['hey', 'hey1', 'hey2', 'hey3', 'alan', 'alan1']

您可以使用字典来记录发生的次数:

l = ['hey', 'alan', 'hey', 'hey', 'hey', 'alan']

d = {}
result = []
for key in l:
    result.append(f'{key}{d[key]}' if key in d else key)
    if key not in d:
        d[key] = 0
    d[key] += 1

print(result)

输出

['hey', 'alan', 'hey1', 'hey2', 'hey3', 'alan1']

此版本使用数据帧:

l1 = ['hey','alan','hey','hey','hey','alan']

df = pd.DataFrame(l1, columns = ['name'])

Out[1]:
    name
0   hey 
1   alan
2   hey 
3   hey 
4   hey 
5   alan

df['num'] = df.groupby(['name']).cumcount()

Out[2]:
    name    num
0   hey     0
1   alan    0
2   hey     1
3   hey     2
4   hey     3
5   alan    1


df['num_name'] = [(lambda x: x[0] + (str(x[1]) if x[1]!=0 else ''))(s) for s in zip(df['name'], df['num'])]

Out[3]:
    name    num num_name
0   hey     0   hey
1   alan    0   alan
2   hey     1   hey1
3   hey     2   hey2
4   hey     3   hey3
5   alan    1   alan1

list(df['num_name'])

Out[4]:
['hey', 'alan', 'hey1', 'hey2', 'hey3', 'alan1']

相关问题 更多 >