簡體   English   中英

如何在 Python 中修改列表中的列表?

[英]How do i modify lists in lists in Python?

所以,我試圖使我的列表中的元素大寫,但我無法使標准的 something.upper(),我猜測是因為列表中的列表。 外匯:

names = [['henry', 'mike'],'jones', 'kevin',['michael', 'simon']]

我該怎么做呢?

謝謝

檢查元素是否為列表字符串類型

for i in names:
    if isinstance(i,list):
        for inner_element in i:
            print(inner_element.upper())
    elif isinstance(i,str): # to handle the case if ints are also present
        print(i.upper())

如果要替換現有列表中的值

for index,i in enumerate(names):
    if isinstance(i,list):
        temp=[]
        for inner_element in i:
            temp.append(inner_element.upper())
        names[index]=temp
    elif isinstance(i,str):
        names[index]=i.upper()

您可以按如下方式使用列表推導式:

uppercase_names = [ name.upper() if isinstance(name, str) else [n.upper() for n in name if isinstance(n, str)] for name in names ]

基本上,我們使用isinstance(name, str)來檢查對象是否實際上是字符串對象。

如果列表中有整數,您可以使用這個復雜的理解:

uppercase_names = [ name.upper() if isinstance(name, str) else name if isinstance(name, int) else [ n.upper() if isinstance(n, str) else n if isinstance(n, int) else n for n in name ] for name in names ]

如果預先不知道列表的深度,您可以嘗試此操作。

輸入

names=['jones', 'kevin', ['henry', 37, ['a', 0.69999]], ['michael', True]]

功能

def recursive_upper(names):
 ret_list=[]
 for x in names:
     if isinstance(x, list):
         ret_list.append(recursive_upper(x))
     elif (isinstance(x, basestring) or isinstance(x, int) or isinstance(x, float) \
           or isinstance(x, long) or isinstance(x, bool) or isinstance(x, complex)):
         ret_list.append(str(x).upper())
 return ret_list

print recursive_func(names)

輸出

['JONES', 'KEVIN', ['HENRY', '37', ['A', '0.69999']], ['MICHAEL', 'TRUE']]

該函數只是檢查類型,如果類型是列表,則遞歸調用自身。 當它找到字符串、int、float、long、bool 或復雜類型時,它會繼續返回文本的大寫版本。 所有其他類型都被簡單地忽略。 (您可以在 elif 條件中添加/刪除類型。請參閱此處

希望這可以幫助 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM