2016-03-28 49 views
2

輸入追加長度爲在列表中的每個串

strlist = ['test', 'string'] 

希望的輸出:

strlist = [('test', 4), ('string', 6)] 

嘗試1:

def add_len(strlist): 
    for i, c in enumerate(strlist): 
     strlist += str(len(strlist)) 
    return strlist 

嘗試2:

def add_len(strlist): 
    for c in strlist: 
     c += " " + str(len(c)) 
    return strlist 

我意識到,我有以下問題:

  • 嘗試1:這將導致一個無限循環,因爲代碼保持添加到列表中。

  • 嘗試2:這不會將值添加到字符串,但是,當我這樣做時,我從#1中得到無限循環問題。

我相信我需要先評估列表中元素的數量並執行while語句,但不太清楚如何執行此操作。

+0

一個簡單的'[(s,len(s))for s in strlist]'應該做 – njzk2

回答

2

您可以使用一個列表的理解是這樣的。

def add_len(strlist): 
    return [(s, len(s)) for s in strlist] 

或擴大,

def add_len(strlist): 
    new_list = [] 
    for s in strlist: 
     new_list.append((s, len(s))) 
    return new_list 

在展開的表格我們可以看到它正在經歷一個有點更清晰的步驟。

  1. 創建列表new_list將您的字符串和長度放入。
  2. 迭代每個字符串strlist
  3. 對於每個字符串,請將該字符串及其長度附加到new_list
  4. 退貨new_list

當然,這兩個給你你想要的輸出:

[('test', 4), ('string', 6)] 
6

使用列表理解:

strlist = ['test', 'string'] 

def add_len(strlist): 
    return [(s, len(s)) for s in strlist] 
+0

完美,謝謝 – 009

0

使用map()

>>> strlist 
['test', 'string'] 

>>> list(map(lambda x: (x, len(x)), strlist)) 
[('test', 4), ('string', 6)] 
0
for i, c in enumerate(strlist) 

i是元素的字符串列表中的索引,以及該元素的值。並且您繼續附加結果(strlist),以便strlist保持增長。

雖然第二次嘗試不會輸出您想要的結果。結果將是strlist = ['test 4', 'string 6']。每一個元素都不是由tuple組成的。

同時這兩次嘗試都修改了strlist,這會帶來潛在的問題(影響涉及strlist的其他屬性/參數)。

更好的解決方案是使用列表理解。

strlist = ['test', 'string'] 
new_strlist = [(s, len(s)) for s in strlist]