0

大家好!

我必须将列表中的位置与同一列表中的下一个位置进行比较。ls[0] 与 ls[1],ls[1] 与 ls[2]

我要做的是将列表与匹配的字符进行比较,如果它们匹配,添加一个点,然后只打印一次重复的字母和重复的次数:

ls = "DDDDTTDAATTTAAAUYUUU"

输出必须是:

大唐兔鱼

4 3 1 2 3 3 1 1 3

我已经做了代码,如下:

n = "DDDDTTTDAATTTAAAUYUUU"
con = 1
a = ""
d = ""
for i in range(len(n)-1):
    if n[i] == n[i+1]:
        con += 1
    else:
        d += " " + str(n[i])
        a += " " + str(con)
        con = 1

print(d)
print(a)

输出:

D T D A T A U Y
4 3 1 2 3 3 1 1

如您所见,在我的代码输出中,缺少最后一个字符 [U] 以及数字 [3]。

我的代码中缺少什么以使其正常工作,感谢您的帮助

4

3 回答 3

2

您可以使用itertools.groupby().

>>> import itertools
>>> l = [(e,len(list(g))) for (e,g) in itertools.groupby(s)]
>>> l
[('D', 4), ('T', 3), ('D', 1), ('A', 2), ('T', 3), ('A', 3), ('U', 1), ('Y', 1), ('U', 3)]

如果您需要两个单独的列表,您可以使用 always 列表推导来拆分它们。

>>> [x for (x,y) in l]
['D', 'T', 'D', 'A', 'T', 'A', 'U', 'Y', 'U']
>>> [y for (x,y) in l]
[4, 3, 1, 2, 3, 3, 1, 1, 3]
于 2021-06-29T15:39:35.823 回答
0
n = "DDDDTTTDAATTTAAAUYUUU"
con = 1
a = ""
d = ""
for i in range(len(n)-1):
    if n[i] == n[i+1]:
        con += 1
    else:
        d += " " + str(n[i])
        a += " " + str(con)
        con = 1

# you are just missing this 
# when the loop finishes you have to concatenate
# a and d also

d += " " + str(n[i])
a += " " + str(con)  

print(d)
print(a)
 D T D A T A U Y U
 4 3 1 2 3 3 1 1 3
于 2021-06-29T15:37:49.660 回答
0

与其他答案相比,重复的代码更少。它本质上迭代了太多次,并在退出循环之前在最后一次迭代中写入待处理的累积结果。

n = "DDDDTTTDAATTTAAAUYUUU"
con = 1
a = ""
d = ""
for i in range(len(n)): # do one more iteration
    if i < len(n) - 1 and n[i] == n[i+1]: # as long as we have not gone past the end of the string, and the char is identical to the next one
        con += 1
    else:
        d += " " + str(n[i])
        a += " " + str(con)
        con = 1

print(d)
print(a)
于 2021-06-29T15:39:11.413 回答