我有一个家庭作业问题。
“编写一个函数 to_str(a),它接受一个数组 a,将它的每个元素转换为一个字符串(使用 str(a[i]))并将所有这些字符串附加在一起。”
这就是我所拥有的
def to_str(a):
for i in a: a.append([i])
return str(a[i])
我不知道如何使用 str(a[i]),我想知道是否有人可以指出正确的方向
从文档:
str(对象) -> 字符串
返回对象的一个很好的字符串表示。如果参数是字符串,则返回值是同一个对象。
所以str(a[i])
将返回一个字符串表示a[i]
,即转换a[i]
为字符串。然后,您需要连接所有i
.
至于你的代码,我有以下评论:
i
是 的一个元素a
,而不是您可能想的索引;a
您正在附加to的元素a
(恐怕是无休止地);a[i]
可能会导致异常,因为就像我说的,i
是一个元素,而不是一个索引;此外,如果 usingstr(a[i])
不是严格强制的,我建议将其作为 unpythonic 跳过。为此,您根本不需要索引。例子:
''.join(str(element) for element in a)
或者
''.join(map(str, a))
会返回你需要的。在这两种情况下str
都适用于 的所有元素a
。
不使用索引的最容易理解(“初学者”)的方法是
s = ''
for element in a:
s += str(element)
return s
它的效率有点低,尽管它有效地做同样的事情。
将每个元素转换为字符串最容易使用列表推导:
[ str(i) for i in a ]
# equivalent to
[ str(a[i]) for i in range(len(a)) ]
# equivalent to
map(str, a) # most concise, use if you want to feel incredibly clever...
所以你可以编写函数:
def to_str2(a):
''.join([str(i) for i in a]) # concatenates the list as a list of strings
.
您的代码几乎可以做到这一点:
def to_str(a):
new_a = [] # rather than use the same a!
for i in a:
new_a.append(str(i)) #convert i to string before appending
return new_a
满足所有任务标准的代码类似于:
def to_str(a):
return reduce(lambda x, y: x + str(y), a, '')
它完全按照上面提到的方式做事:首先将它们转换为字符串,然后添加到由已经处理的元素组成的字符串(一开始只是空字符串)。
编辑:更清晰(并受 Python 3 支持)的方法是使用显式循环元素。它的作用完全相同,同时阐明了 reduce() 的工作原理:
def to_str(a):
result = '' # third argument of reduce()
for item in a:
result += str(item) # does what reduce() lambda argument was doing
return result
最简单的方法是:
[str(i) for i in a]
如果你想要一个功能:
def to_str(a):
return [str(i) for i in a]