【发布时间】:2016-11-03 17:52:06
【问题描述】:
我有以下输入:
'lesson*lesson*practice*lesson*quiz*practice'
这是所需的输出:
'lesson1*lesson2*practice1*lesson3*quiz*practice2'
因此,如果列表中有任何项目重复,我想将 1,2,3... 附加到出现的位置。为此,我想出了以下代码:
line = 'lesson*lesson*practice*lesson*quiz*practice'
line1 = line
def list_to_dict(li):
dct = {}
for item in li.split('*'):
if dct.has_key(item):
dct[item] = dct[item] + 1
else:
dct[item] = 1
return dct
for item in list_to_dict(line).keys():
counter = 1
if list_to_dict(line)[item] > 1:
indices = [i for i, x in enumerate(line.split('*')) if x == item]
for idx, _ in enumerate(line1[indices]):
line1[idx] = line1[idx] + str(counter)
counter = counter + 1
print line1
print line
但是这段代码给了我以下错误:
TypeError Traceback (most recent call last)
<ipython-input-187-a85290a89eea> in <module>()
6 if list_to_dict(line)[item] > 1:
7 indices = [i for i, x in enumerate(line) if x == item]
----> 8 for idx, _ in enumerate(line1[indices]):
9 line1[idx] = line1[idx] + str(counter)
10 counter = counter + 1
TypeError: string indices must be integers, not list
有人可以帮助获得所需的输出吗?
如果您认为我的算法不能很好地实现这一点,我也欢迎任何新想法。
【问题讨论】:
-
for idx, _ in enumerate(line1[indices]):应该做什么? -
不应该只是
for idx in indices: -
@LutzHorn:我从stackoverflow.com/questions/3173915/… 获取了您正在讨论的特定代码。这是为了替换列表中的项目。
-
@PatrickHaugh:我试过你之前说的,我收到以下错误:
TypeError Traceback (most recent call last) <ipython-input-200-a67f65e082c3> in <module>() 7 indices = [i for i, x in enumerate(line.split('*')) if x == item] 8 for idx in indices: ----> 9 line1[idx] = line1[idx] + str(counter) 10 counter = counter + 1 11 TypeError: 'str' object does not support item assignment -
所以你复制了你不理解的代码并要求我们给你解释一下?