Tom*_*ski 6 python list python-3.x
我扩展并添加了一个新问题.
我有一个清单:
li = [2, 3, 1, 4, 2, 2, 2, 3, 1, 3, 2]
Run Code Online (Sandbox Code Playgroud)
然后我认识到哪个值最常出现,我保留在变量中的值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
Run Code Online (Sandbox Code Playgroud)
之后,重复的所有值都会增加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
Run Code Online (Sandbox Code Playgroud)
完成此操作后,我得到:
li = [2, 3, 1, 4, 2, 2, 2, 13, 11, 23, 2]
Run Code Online (Sandbox Code Playgroud)
如您所见,最常见的值是2,因此它保持不变.例如,3发生三次,并且从所有三个新值创建3,3 + 10,3 + 20.并且与值的其余部分相同(除了2).但是如果两个最大值彼此相邻(或者是更长的序列),我想在这样的序列中逐个增加10,然后得到:
li = [2, 3, 1, 4, 2, 12, 22, 13, 11, 23, 2]
Run Code Online (Sandbox Code Playgroud)
怎么做?我现在可以在新循环上执行相同操作,但已经在更改的列表上并应用条件li[i] == li[i+1]
,但也许可以在当前循环中完成?
首先,您应该使用a collections.Counter
来获取列表中元素的计数并查找most_common
元素.
li = [2, 3, 1, 4, 2, 2, 2, 3, 1, 3, 2]
l2 = collections.Counter(li).most_common(1)[0][0]
Run Code Online (Sandbox Code Playgroud)
然后,如果当前元素是最常见元素的第一个匹配Counter
项,则可以使用秒作为运行计数,并将其重置为0
.然后使用该计数器将10的倍数加到数字上,然后递增它.
running = collections.Counter()
last = None
for i, e in enumerate(li):
if e == l2 and e != last:
running[e] = 0
li[i] = e + 10 * running[e]
running[e] += 1
last = e
Run Code Online (Sandbox Code Playgroud)
之后,li
是[2, 3, 1, 4, 2, 12, 22, 13, 11, 23, 2]
归档时间: |
|
查看次数: |
118 次 |
最近记录: |