3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
檢查元素是否為列表字符串類型
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())
如果要替換現(xiàn)有列表中的值
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()

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果預(yù)先不知道列表的深度,您可以嘗試此操作。
輸入:
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']]
該函數(shù)只是檢查類型,如果類型是列表,則遞歸調(diào)用自身。當(dāng)它找到字符串、int、float、long、bool 或復(fù)雜類型時(shí),它會(huì)繼續(xù)返回文本的大寫版本。所有其他類型都被簡(jiǎn)單地忽略。(您可以在 elif 條件中添加/刪除類型。請(qǐng)參閱此處)

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以按如下方式使用列表推導(dǎo)式:
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)
用來檢查對(duì)象是否實(shí)際上是一個(gè)字符串對(duì)象。
如果列表中有整數(shù),您可以使用這個(gè)復(fù)雜的理解:
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 ]
添加回答
舉報(bào)