gpt4 book ai didi

Python:如何对只有一种类型的重复出现的连续数字进行分组?

转载 作者:行者123 更新时间:2023-12-05 09:27:24 26 4
gpt4 key购买 nike

我编写此程序是为了在字符串中查找某些连续重复出现的数字并将它们分组。该字符串仅包含 0 和 1,我想通过将它们转换为数字来缩短重复出现的零。另外,为了避免混淆,我将所有的 1 都转换成了一个字母。例如:

item = list("00011101110100010111010001110000")

for i in item:
if i == "1":
item[item.index(i)] = "n"
if i == "0":
index = item.index(i)
zeros = 0
for shft, _ in enumerate(item):
try:
if item[index+shft] == "1":
break
if item[index+shft] == "0":
item.pop(index+shft)
zeros+=1
except IndexError:
pass
item.insert(index, zeros)

print(item)

我写的这个程序的预期输出是

[3, 'n', 'n', 'n', 1, 'n', 'n', 'n', 1, 'n', 3, 'n', 1, 'n', 'n', 'n', 1, 'n', 3, 'n', 4]

但我得到的输出是:

[2, 1, 'n', 'n', 'n', 1, 'n', 'n', 'n', 4, 'n', 1, 'n', 'n', 'n', 'n', 3, 'n', 1, 'n', 'n', 'n', 2, 1, 1]

我四处寻找这种可以对连续字符进行分组的东西,我找到的最接近的东西是 this Java 示例,但我在 python 中实现它时遇到了问题。

然后我尝试了这种方法:

item = img[2]

zeros = 0
for idx, i in enumerate(item):
if i == "0":
zeros += 1
item.pop(idx)
elif i == "1":
item[idx] = "n"
if zeros != 0:
item.insert(idx-1, zeros)
zeros = 0
elif i == "x":
if zeros != 0:
item.insert(idx-1, zeros)
zeros = 0

print(item)

但是输出是:

['0', 2, '1', 'n', 'n', 1, '1', 'n', 'n', '1', '0', '1', 4, '1', 'n', 'n', '1', '0', 3, '1', 'n', 'n', '0', 2, '0', 'x']

谁能告诉我比这更好更快的方法,并告诉我哪里出错了?

最佳答案

您可以使用 itertools.groupby 对同一键的连续项目进行分组。由于在这种情况下您真的只想将 0 分组,而将 1 分开,因此我使用的一个技巧是使用一个关键函数,该函数为 0 返回 False 并为 1 返回一个递增数字,以便 1s不会组合在一起,因为它们的键总是唯一的。您可以使用 itertools.count 生成这样的递增数字:

from itertools import groupby, count

item = '00011101110100010111010001110000'

c = count(1)
print([
'n' if k else sum(1 for _ in g)
for k, g in groupby(item, lambda i: i == '1' and next(c))
])

这个输出:

[3, 'n', 'n', 'n', 1, 'n', 'n', 'n', 1, 'n', 3, 'n', 1, 'n', 'n', 'n', 1, 'n', 3, 'n', 'n', 'n', 4]

关于Python:如何对只有一种类型的重复出现的连续数字进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72443381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com