2012-09-23 87 views
1

我遇到了作业问题。Python:从列表转换为字符串

“写的函数,to_str(a)中,接受一个阵列,每个 其元素转换为字符串(使用STR(A [1])),并且所有这些 串附加在一起。 “

这是我

def to_str(a): 
    for i in a: a.append([i]) 
    return str(a[i]) 

我不知道如何使用STR(A [1]),我想知道,如果有人可以点我到正确的方向

回答

9

从文档:

STR(对象) - >字符串

返回一个不错的字符串表示的对象。如果参数是 一个字符串,则返回值是同一个对象。

所以str(a[i])将返回一个字符串表示的a[i],即转换a[i]为字符串。 然后,您需要连接所有值为i的字符串。

至于你的代码,我有以下几点意见:

  • ia的元素,而不是一个指标,因为你可能会想;
  • 你正在追加a的元素到a(无尽,恐怕);
  • a[i]可能会导致异常,因为像我说的,i是一个元素,而不是索引;
  • 您需要返回串联字符串,而不是一个元素中的字符串。

此外,如果使用str(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 

这有点低效率的,但它有效地做同样的事情。

+0

我认为循环遍历'a'本身的元素更清晰,而不是循环遍历索引。 – DSM

+0

@DSM我也是,太糟糕了,这是作业的一部分。我也在我的回答中加了这个。 –

+0

非常感谢!它清除了我很多疑问。 – user1692517

0

的满足所有任务的标准代码相当类似:

def to_str(a): 
    return reduce(lambda x, y: x + str(y), a, '') 

其中在提到的方式究竟件事情:首先将它们转换为字符串,然后添加到由已处理元素构成的字符串中(开头只是emty字符串)。

编辑:更清晰(和Python 3支持)的方式是使用显式循环通过元素。它不完全一样,同时阐明了如何减少()的工作原理:

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 
+0

为什么downvote? – Tadeck

+0

+1(不知道为什么倒了投票,但也许'减少'是混乱无解释吗?)然而,我喜欢地图/减少解决方案:) –

+0

不是我 - 我评论而不是downvoting - 但(只是 - 删除)第一个没有工作,第二个(通过与'''.join(a)中的elem的str(elem)'等比较)使用不受欢迎的reduce,引入lambda函数和两个非显然命名的变量,并且显示二次行为[或者,downvoter实际上是使用'a [i]'循环遍历索引,谁知道的?] – DSM

-1

最简单的方法是:

[str(i) for i in a] 

如果你想有一个函数:

def to_str(a): 
    return [str(i) for i in a] 
+0

解决了问题的第一部分,而不是“将所有这些字符串附加在一起”部分。 – dusan

1

每个元素转换成字符串是最容易使用列表理解:

[ 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