我的任务是将字符串'AAAABBBCCDAABBB'
放入如下列表中:['A','B','C','D','A','B']
我现在正在努力工作2个小时,我无法得到解决方案。到目前为止,这是我的代码:
list = []
string = 'AAAABBBCCDAABBB'
i = 1
for i in string:
list.append(i)
print(list)
for element in list:
if list[element] == list[element-1]:
list.remove(list[element])
print(list)
我是编程的新手,错误“TypeError:list indices必须是整数或切片,而不是str”总是显示...
我已经改变了比较
if list[element] == list[element-1]
到
if list[element] is list[element-1]
但错误保持不变。我已经google了几次,但总有一些列表不需要字符串格式,但我需要它(我是对的吗?)。
感谢您的帮助! NoAbL
答案 0 :(得分:3)
这是一种不同的方法,但您的问题可以使用 itertools.groupby
解决,如下所示:
from itertools import groupby
string = 'AAAABBBCCDAABBB'
answer = [group[0] for group in groupby(string)]
print(answer)
<强>输出强>
['A', 'B', 'C', 'D', 'A', 'B']
根据文档,groupby
:
创建一个从迭代
返回连续键和组的迭代器
在我的示例中,我们使用列表推导来迭代连续的键和组,并使用索引0
来提取密钥。
答案 1 :(得分:2)
首先,在内置python语句或数据结构(如list
,tuple
或甚至是导入的模块名称)之后,不要为变量命名,这也适用于文件。例如,命名文件socket.py
并导入socket
模块肯定会导致错误(我将让您自己尝试一下)
element
是一个字符串,一个iterable的索引必须是数字而不是字符串,所以你可以告诉python
给我2号位的物品。
但是现在你正试着说我在A
位置给我这个项目,而且这个项目甚至不能用英语,没有编程语言。
你应该使用enumerate
函数,如果你想循环遍历它的索引,或者你可以做到
for i in range(len(list))
并循环遍历列表的长度范围,无论如何你都不需要这些元素。
这是一种更简单的方法来实现您的目标
s = string = 'AAAABBBCCDAABBB'
ls = []
for i in s:
if ls:
if i != ls[-1]:
ls.append(i)
else:
ls.append(i)
print(ls)
答案 2 :(得分:1)
您可以尝试以下代码:
list = []
string = 'AAAABBBCCDAABBB'
# remove the duplicate character before append to list
prev = ''
for char in string:
if char == prev:
pass
else:
list.append(char)
prev = char
print(list)
输出
['A', 'B', 'C', 'D', 'A', 'B']
答案 3 :(得分:0)
在你的循环中,element
是字符串。您希望拥有索引。
尝试for i, element in enumerate(list)
。
编辑:i
现在将成为您当前正在迭代的element
的索引。