我正在尝试编写一个接受数组的函数,将其转换为字符串,然后将其附加在一起。
实施例。 [1,2,3,4,5,6]
将返回'123456'
。
这是我已经尝试过的代码,但它给出了错误“list indices必须是整数,而不是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
上面的代码有什么问题?它只是返回原始值。
答案 0 :(得分:10)
不要重新发明轮子:
>>> l = [1,2,3,4,5,6]
>>>
>>> ''.join(map(str, l))
'123456'
代码中的问题是Python中的for
循环实际上是for-each循环。因此,当您有for i in a
之类的内容时,i
会占用a
的所有元素,而不是a
的索引。
因此,你的循环实际上在一次迭代中工作正常,并且你成功地将列表的元素设置为字符串(具体地,索引为1
的元素),因为它是{的第一个值{ {1}})。 但是,下一个i
将引用此新字符串元素,因此当您执行i
时会导致错误。
这是一个有趣的现象,所以让我们看一下简化列表a[i]
,它是a = [1,2,3]
的子列表,足以看出错误发生的位置和原因位:
+-----+-----+-----+ | 1 | 2 | 3 | +-----+-----+-----+ ^ i (loop starts, i takes on first value of list: 1) +-----+-----+-----+ | 1 | '2' | 3 | +-----+-----+-----+ ^ i (we set element at index i (a[1]) to str(a[1]), which is '2') +-----+-----+-----+ | 1 | '2' | 3 | +-----+-----+-----+ ^ i (next iteration, i takes on second value: '2') Error occurs with a[i], list indices must be integers.
<强>参考强>
答案 1 :(得分:1)
您可以使用join和list comprehensions
完成此操作''.join([str(_) for _ in a])
更好(谢谢chepner)
''.join(str(_) for _ in a)
答案 2 :(得分:1)
这个应该有效:
>>> t =[1,2]
>>> s=[3,4]
>>> ''.join(str(a) for a in t + s)
'1234'
>>>
官方文档提供了一个很好的解释 join。 阅读the generators explanation之后,您应该感受到它的力量: - )
答案 3 :(得分:0)
它给了我错误“列表索引必须是整数,而不是str”
是因为
for i in a:
遍历a
中的元素。第一次循环,i
取值1
,因此它
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)):
...