-2

我正在尝试编写一个函数,该函数接受一个数组,将其转换为字符串,然后将其附加在一起。

前任。[1,2,3,4,5,6]会回来'123456'的。

这是我已经尝试过的代码,但它给了我错误“列表索引必须是整数,而不是 str”

a = [1,2,3,4,5,6,7,8,9,10]

def add_it_up(a,b):
    return a+b

def to_str(a):
    for i in a:
        a[i] = str(a[i])

    reduce(add_it_up, a)

a = [1,2,3,4,5,6,7,8,9,10]

def to_str(a):

    ''.join(map(str, l))
    return a

上面的代码有什么问题?它只是返回原始值。

4

4 回答 4

10

不要重新发明轮子:

>>> l = [1,2,3,4,5,6]
>>> 
>>> ''.join(map(str, l))
'123456'

您的代码中的问题是forPython 中的循环实际上是 for-each 循环。因此,当您有类似 的东西时for i in ai将采用 的所有元素a而不是 的索引a

因此,您的循环实际上适用于一次迭代,并且您成功地将列表的元素设置为字符串(特别是 index 处的元素1,因为这是 的第一个值i)。但是,nexti将引用这个新的字符串元素,因此在您这样做时会导致错误a[i]

这是一个有趣的现象,所以让我们用简化的 list 来看看这个a = [1,2,3],它是您的子列表,a足以了解错误发生的位置和原因:

+-----+-----+------+
| 1 | 2 | 3 |
+-----+-----+------+
   ^
   i(循环开始,i 取列表的第一个值:1)

+-----+-----+------+
| 1 | '2' | 3 |
+-----+-----+------+
   ^
   i(我们将索引 i (a[1]) 处的元素设置为 str(a[1]),即 '2')

+-----+-----+------+
| 1 | '2' | 3 |
+-----+-----+------+
         ^
         i(下一次迭代,i 取第二个值:'2')

a[i] 发生错误,列表索引必须是整数。

参考

于 2013-09-20T14:08:12.160 回答
1

您可以使用连接列表推导来完成

''.join([str(_) for _ in a])

更好(感谢 chepner)

''.join(str(_) for _ in a)
于 2013-09-20T14:15:48.197 回答
1

这个应该工作:

>>> t =[1,2]
>>> s=[3,4]
>>> ''.join(str(a) for a in t + s)
'1234'
>>>

官方文档为join提供了很好的解释 。在阅读了生成器的解释之后,你应该对它的力量有一个感觉:-)

于 2013-09-20T14:16:24.557 回答
0

它给了我错误“列表索引必须是整数,而不是 str”

发生是因为

for i in a:

遍历. _ _ a第一次通过循环,获取i1

a[1] = str(a[1])

变为a_

[1,"2",3,4,...]

然后下一次通过循环i得到a[1]哪个现在是字符串'2',它会尝试

a["2"] = str(a["2"])

失败是因为您无法使用字符串索引 Python 列表。


其他人已经解释了如何解决您的特定问题,但总的来说,要迭代列表的索引,请尝试

for i in xrange(0, len(a)):
  ...
于 2013-09-20T14:36:38.057 回答