Python3 TypeError:列表索引必须是整数或切片,而不是 str



我的任务是将字符串'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语句或数据结构(如listtuple甚至导入的模块名称之后命名变量,这也适用于文件。 例如,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的索引。

相关内容

最新更新