我的任务是将字符串'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)
我是编程新手,并且总是出现错误"类型错误:列表索引必须是整数或切片,而不是 str"......
我已经更改了比较
if list[element] == list[element-1]
自
if list[element] is list[element-1]
但错误保持不变。我已经用谷歌搜索了几次,但总有一些列表不需要字符串格式,但我需要它(我说得对吗?
谢谢你的帮助!无AbL
不要在内置的python语句或数据结构(如list
,tuple
甚至导入的模块名称之后命名变量,这也适用于文件。 例如,socket.py
命名文件并导入socket
模块肯定会导致错误(我会让你自己尝试一下)
在你的代码中element
是一个字符串,可迭代对象的索引必须是数字而不是字符串,所以你可以告诉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)
这是一种不同的方法,但可以使用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
仅提取键。
您可以尝试以下代码:
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']
在你的循环中,element
是字符串。您希望拥有索引。
试试for i, element in enumerate(list)
.
编辑:i
现在将成为您当前正在迭代的element
的索引。