2016-11-03 61 views
0

我正在編寫一個函數,它將參數列表作爲參數,但返回列表的副本並進行以下更改: •字符串將其所有字母都轉換爲大寫 •整數和浮點數有其價值增加1個 •布爾被否定(假變真,真亦假) •列表被替換的單詞「列表」 此功能應當保留原始輸入不變複製列表,但進行了以下更改:

這是我迄今爲止所做的,但我不知道如何將所有這些添加到空列表,這裏是我的程序:

name = [1, 2, "abc123", True, [1, 2, 3]] 

new_list = [ ] 

for element in name: 

    if(type(element) == str): 
     for i in element: 
      if(i.isalpha()): 
       element = element.upper() 
     new_list += element 
     #print(new_list) 
     print(element) 

    elif(type(element) == int): 
     element = element + 1 
     print(element) 

    elif(type(element) == bool): 
     print(not(element)) 
    else: 
     print("list") 
+0

new_list.append(new_item)是您所需要的。 – woockashek

回答

1

你是如此接近並在最後一道關口跌倒。只需使用append即可添加到空列表中。

name = [1, 2, "abc123", True, [1, 2, 3]] 

new_list = [ ] 

for element in name: 

    if(type(element) == str): 
     for i in element: 
      if(i.isalpha()): 
       element = element.upper() 

     new_list.append(element) 

    elif(type(element) == int): 
     element = element + 1 
     new_list.append(element) 

    elif(type(element) == bool): 
     new_list.append(not element) 
    else: 
     new_list.append('list') 
+2

我認爲在這種情況下使用'type(x)== foo'而不是'isinstance(x,foo)'是不合理的。請參閱:http://stackoverflow.com/a/1549854/3377150 –

+0

@PierceDarragh可能是這樣,但問題只說「我不知道如何將所有這些添加到一個空列表」,所以我做了最小的修改,使其與原始工作,以彌補差距。 – roganjosh

+1

這很公平,但我認爲這個網站的精神意味着我們會指導提問者在適當的地方尋找比他們自己更好的解決方案。在這種情況下,我認爲至少應該向OP指出,'isinstance'通常比'type'更適合這種情況。 –

2

如果您先創建一個函數來處理個案個案,那麼這會容易得多。

def convert(item): 
    if isinstance(item, str): 
     return item.upper() 
    if isinstance(item, bool): 
     return not item 
    if isinstance(item, list): 
     return "List" 
    if isinstance(item, int) or isinstance(item, float): 
     return item + 1 
    raise ValueError("invalid type: {}".format(type(item))) 

一旦我們有了這一點,我們可以只申請一個map

map(convert, my_list) 

如果你迫切需要的是一個清單,而不僅僅是一個迭代,將其轉換爲一個列表:

list(map(convert, my_list)) 
相關問題