gpt4 book ai didi

python - 将列表压缩为带重复的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:17 30 4
gpt4 key购买 nike

逻辑:将一个列表压缩成一个字符串,其中在列表中重复两次的字母在结果字符串中重复指定的次数。

例子:

  • ['a','a',2,'b','c','c',3], --> aabccc
  • ['a,','a',2] --> aa
  • ['c','c',3] --> ccc.

我的代码是:

def run_length_decoder(in_list):
list=[]
for i in range(0,len(in_list)-1):
if in_list[i]==in_list[i+1]:
for x in range((i+2)-1):
list.append(in_list[i])
else:
list.append(in_list[i])
list.append(in_list[-1])
word = ""
for letter in list:
word += str(letter)
return word

这行不通...因为使用 ['a', 'a', 2, 'b', 'b', 2, 'a', 'b', 'a 运行上面的代码'] 返回 'aaa2bbbbbb2aba',但应该返回 'aabbaba'

最佳答案

看起来很复杂。对于初学者,您应该更正缩进。此外,由于数字计数器是可选的,因此您需要添加逻辑来识别整数与字符串。最后,由于字母数不需要与以下计数器同步,因此您需要明确地为每个计数器附加一个字母。

您可以通过 itertools.groupby 和列表推导来执行此操作。

from itertools import groupby, zip_longest

L = ['a', 'a', 2, 'b', 'b', 2, 'a', 'b', 'a']

L2 = [i for i, _ in groupby(L)]

res = ''.join([i*(j if isinstance(j, int) else 1)
for i, j in zip_longest(L2, L2[1:])
if isinstance(i, str)])

print(res)

aabbaba

关于python - 将列表压缩为带重复的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50838763/

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