2017-11-01 18 views
0
new_list = [1, "hello"] 
is_str = (type(str) is True) 
for element in new_list: 
    if (element is is_str): 
     element = element.upper() 

リスト内の各要素を実行するループを作成しようとしていますが、文字列が見つかると大文字で要素を返します。しかし、何らかの理由で私のif文が私の好きなところで動作していないようです。何か案は?リスト内の値へのアクセス

+1

私の推測では、 'is_str'は' False'で、 'new_list'の要素は' False'と同じではありません。 – melpomene

+0

'もしisinstance(element、str):'ならば。 – ekhumoro

+1

出力は何ですか? – MrJLP

答えて

4

(通常の方法)をこのお試しください:

new_list = [1, "hello"] 

for element in new_list: 

    if isinstance(element, str): 
     element = element.upper() 
     print(element) 

Python的な方法:

new_list = [1, "hello", "ssss"] 
your_data = [element.upper() for element in new_list if isinstance(element, str)] 
print(your_data) 

別の方法:

new_list = [1, "hello", None] 

for element in new_list: 

    if type(element) is str: 
     element = element.upper() 
     print(element) 

コメントについて:

を使用して
+0

変更されたリストは要素だけでなくリストとしてどのように返されますか? – user498021

+0

この場合、私はそれを[1、 "HELLO"] – user498021

+0

@ user498021にします:完了! :)あなたは私plzをチェックすることがあります。 – DRPK

0

シングルライナー:

>>> [x.upper() for x in l if isinstance(x, str)] 

#driver値:

IN : l = [1, 'adsa', 3, 'ASD'] 
OUT : ['ADSA', 'ASD'] 

あなたが直面している問題がelementupdate the listへのご使用方法によるものです。代わりにindexを使用してください。

for i, element in enumerate(new_list): 
    if type(element)==str: 
     new_list[i] = element.upper() 
0

要素がすべての文字列である場合は、これを行うために、よりPythonicな方法は、チェックしていないことになります。要素が文字列である場合は、このチェックより良い作品

for element in new_list: 
    try: 
     uppercase_element = element.upper() 
    except AttributeError: 
     pass # Skip this element as it can't be uppercased 
    else: 
     print uppercase_element 

一つの具体的な理由があり、 Python 2では、Unicodeオブジェクトは文字列ではありませんが、大文字にすることができます(おそらく提供した例にあるはずです)。

+1

'else'で印刷するのは、単に' try'で( 'else'を持たないで)行うよりも優れていますか? –

+0

'try'ブロックの中で、あなたが捕まえているエラーを引き起こすものだけを実行する方が良いです。しかし、この例では、SLOCを保存することが必死ならば、両方をやり遂げることができます。 – Jared

+0

ええ、私は 'try' +' else'を使ったことはないと思っています。しかし、私は[チュートリアル](https://docs.python.org/3/tutorial/errors.html)もこう言っています: "" else節の使用はより良い[...] "*です。今、私は疑問に思っています:その2行目が別のエラーを引き起こす可能性があるなら、 'else'の中にネスト/インデントされた別の' try'をもうけますか?そして3番目はさらにネスト/インデントされますか? –

関連する問題