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

时间:2016-03-12 11:31:05

标签: string list python-3.x int typeerror

我的任务是将字符串'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

4 个答案:

答案 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语句或数据结构(如listtuple或甚至是导入的模块名称)之后,不要为变量命名,这也适用于文件。例如,命名文件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的索引。