【发布时间】:2017-12-15 09:50:02
【问题描述】:
我扩展并添加为一个新问题。
我有一个清单:
li = [2, 3, 1, 4, 2, 2, 2, 3, 1, 3, 2]
然后我识别出哪个值最常出现,哪个值我保留在变量i2中:
f = {}
for item in li:
f[item] = f.get(item, 0) + 1
for i in f:
if f[i]==int(max(f.values())):
i2 = i
稍后所有重复的值都增加 10,但不包括最大值。这是我使用的代码:
for i in range(len(li)):
for x in range(i + 1, len(li)):
if li[i] == li[x] and li[i] != i2:
li[x] = li[x] + 10
在这个操作之后我得到:
li = [2, 3, 1, 4, 2, 2, 2, 13, 11, 23, 2]
如您所见,最常见的值是 2,因此它保持不变。例如,3 出现 3 次,从所有三个新值中创建 3、3 + 10、3 + 20。其余的值相同(2 除外)。 但是,如果两个最大值彼此相邻(或以更长的序列),我想在这样的序列中将每个后续增加 10,并得到:
li = [2, 3, 1, 4, 2, 12, 22, 13, 11, 23, 2]
怎么做?
我现在可以在新循环上执行相同的操作,但已经在更改列表中并应用条件li[i] == li[i+1],但也许可以在当前循环中完成?
【问题讨论】:
-
和以前一样的问题?
-
是的,因为我添加了更多解释以使其更易于理解。
-
"但是如果两个最大值彼此相邻,我只想将第二个增加 10" 这是让这令人头疼的部分。我有一个不尊重这条规则的非常优雅的解决方案。您还必须更精确。如果三个或更多最常见的值依次出现怎么办?如果两个或多个最常见的值按顺序出现,但这些值不同,因为在原始列表中出现最多次数的值不止一个,该怎么办?
-
也许从更一般的角度思考或跳出框框思考可能会有所帮助。为了帮助我们更好地理解规则,您能否描述(在更高的层次上)您正在寻求解决的问题?
-
@timgeb 哦,请不要... xD 为什么不
[1,1,0,1,1,1]=>[1, 11, 0, 1, 11, 21]?
标签: python python-3.x list