2012-09-23 86 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