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)

我是编程新手,总是出现错误“TypeError: list indices must be integers or slice, not str”…

我已经改变了比较

if list[element] == list[element-1]

if list[element] is list[element-1]

但错误保持不变。我已经用谷歌搜索了几次,但总有一些不需要字符串格式的列表,但我需要它(对吗?)。

感谢您的帮助! 无抗体

原文由 NoAbL 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 847
2 个回答

首先,不要在内置 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)

原文由 danidee 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是一种不同的方法,但您的问题可以使用 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 仅提取键。

原文由 gtlambert 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进