0

私は新しいPythonプログラマーで、いくつか試してみました。文字列のリストを作成し、リストをループして各要素のサイズを確認したいと思います。サイズが5より大きい場合は、その文字列を大文字の文字列に変更します。私はその要素にアクセスする方法に固執しています。以下は私が書いたコードの一部です。前もって感謝します!

lis = ['heeeeellllooo','world','low','higggghhh']
for elem in list:
  if len(lis[elem]) > 5:
    list[elem].upper()
4

3 に答える 3

5

と一緒に使用list comprehensionternary operatorます:

In [16]: lis = ['heeeeellllooo','world','low','higggghhh']

In [17]: [x.upper() if len(x)>5 else x for x in lis] # this is a new list

Out[17]: ['HEEEEELLLLOOO', 'world', 'low', 'HIGGGGHHH']

を使用することもできます。enumerate()最初の項目全体が要素のインデックスであり、2 番目の項目が要素自体です。enumeratetuple

このメソッドは元のリストを変更します。

In [18]: for index,elem in enumerate(lis):
   ....:     if len(elem)>5:
   ....:         lis[index]=elem.upper()  #access element by index
   ....:         

In [19]: lis
Out[19]: ['HEEEEELLLLOOO', 'world', 'low', 'HIGGGGHHH']

リストはどのように実装されますか? :

Python のリストは実際には可変長配列であり、Lisp スタイルの連結リストではありません。この実装では、他のオブジェクトへの参照の連続した配列を使用し、この配列へのポインターと配列の長さをリスト ヘッド構造に保持します。

これにより、リスト a[i] のインデックス作成は、コストがリストのサイズやインデックスの値に依存しない操作になります。

項目が追加または挿入されると、参照の配列のサイズが変更されます。アイテムを繰り返し追加する際のパフォーマンスを改善するために、いくつかの巧妙さが適用されます。配列を拡大する必要がある場合、余分なスペースが割り当てられるため、次の数回は実際のサイズ変更は必要ありません。

于 2013-01-10T00:21:56.783 に答える
3

enumerateその場で変更したい場合は、非常に便利です。これを試して:

for idx, elem in enumerate(lis):
    if len(elem) > 5:
        list[idx] = elem.upper()
于 2013-01-10T00:24:05.893 に答える
0

これが、forループを使用して試みていたことを実行する正しい方法です。コードでは、リストにlisとlistの2つの異なる変数名を使用しました。変数elemはリスト内の項目であり、インデックスではありません。インデックスを取得するには、enumerate()を使用する必要があります。Ashwini Chaudharyが示した解決策はリスト内包表記と呼ばれ、これを行うためのはるかに優れた方法です。

for i, elem in enumerate(lis):
  if len(elem) > 5:
    lis[i] = elem.upper()
于 2013-01-10T00:31:00.053 に答える