Python Language リストメソッドとサポートされる演算子


与えられたリストから始めてa

a = [1, 2, 3, 4, 5]
  1. append(value) - リストの最後に新しい要素を追加します。

    # Append values 6, 7, and 7 to the list
    a.append(6)
    a.append(7)
    a.append(7)
    # a: [1, 2, 3, 4, 5, 6, 7, 7]
    
    # Append another list
    b = [8, 9]
    a.append(b)
    # a: [1, 2, 3, 4, 5, 6, 7, 7, [8, 9]]
    
    # Append an element of a different type, as list elements do not need to have the same type
    my_string = "hello world"
    a.append(my_string)
    # a: [1, 2, 3, 4, 5, 6, 7, 7, [8, 9], "hello world"]
    

    append()メソッドは、リストの最後に新しい要素を1つだけ追加することに注意しください 。リストを別のリストに追加すると、追加するリストは最初のリストの最後に1つの要素になります。

    # Appending a list to another list
    a = [1, 2, 3, 4, 5, 6, 7, 7]
    b = [8, 9]
    a.append(b)
    # a: [1, 2, 3, 4, 5, 6, 7, 7, [8, 9]]
    a[8]
    # Returns: [8,9]
    
  2. extend(enumerable) - 別の列挙可能要素から要素を追加してリストを拡張します。

    a = [1, 2, 3, 4, 5, 6, 7, 7]
    b = [8, 9, 10]
    
    # Extend list by appending all elements from b
    a.extend(b)
    # a: [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10]
    
    # Extend list with elements from a non-list enumerable:
    a.extend(range(3))
    # a: [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 0, 1, 2]
    

    リストは、 +演算子と連結することもできます。元のリストは変更されません。

    a = [1, 2, 3, 4, 5, 6] + [7, 7] + b
    # a: [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10]
    
  3. index(value, [startIndex]) - 入力値が最初に出現したときのインデックスを取得します。入力値がリストにない場合、 ValueError例外が発生します。 2番目の引数が指定された場合、指定されたインデックスで検索が開始されます。

    a.index(7)
    # Returns: 6
    
    a.index(49) # ValueError, because 49 is not in a.
    
    a.index(7, 7)
    # Returns: 7
    
    a.index(7, 8) # ValueError, because there is no 7 starting at index 8
    
  1. insert(index, value) - 指定されたindex直前にvalue挿入しvalue 。したがって、挿入後、新しい要素は位置indexを占有する。

    a.insert(0, 0)  # insert 0 at position 0
    a.insert(2, 5)  # insert 5 at position 2
    # a: [0, 1, 5, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10]
    
  1. pop([index]) - indexの項目を削除して返します。引数がなければ、リストの最後の要素を削除して返します。

    a.pop(2)
    # Returns: 5
    # a: [0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10]
    a.pop(8)
    # Returns: 7
    # a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    # With no argument:
    a.pop()
    # Returns: 10
    # a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
  2. remove(value) - 指定された値の最初のオカレンスを削除します。提供された値が見つからない場合、 ValueErrorが発生します。

    a.remove(0)
    a.remove(9)
    # a: [1, 2, 3, 4, 5, 6, 7, 8]
    a.remove(10)
    # ValueError, because 10 is not in a
    
  3. reverse() - リストをその場で反転し、 Noneを返します。

    a.reverse()
    # a: [8, 7, 6, 5, 4, 3, 2, 1]
    

    リストを逆転させる他の方法もあります

  4. count(value) - リスト内の値の出現回数を数えます。

    a.count(7)
    # Returns: 2
    
  5. sort() - リストを数値順および辞書順にソートし、 Noneを返します。

    a.sort()
    # a = [1, 2, 3, 4, 5, 6, 7, 8]
    # Sorts the list in numerical order
    

    sort()メソッドのreverse=Trueフラグを使用してソートすると、リストを逆にすることもできます。

    a.sort(reverse=True)
    # a = [8, 7, 6, 5, 4, 3, 2, 1]
    

    あなたがアイテムの属性でソートしたい場合は、使用することができkeyキーワード引数を:

    import datetime
    
    class Person(object):
        def __init__(self, name, birthday, height):
            self.name = name
            self.birthday = birthday
            self.height = height
    
        def __repr__(self):
            return self.name
    
    l = [Person("John Cena", datetime.date(1992, 9, 12), 175),
         Person("Chuck Norris", datetime.date(1990, 8, 28), 180),
         Person("Jon Skeet", datetime.date(1991, 7, 6), 185)]
    
    l.sort(key=lambda item: item.name)
    # l: [Chuck Norris, John Cena, Jon Skeet]
    
    l.sort(key=lambda item: item.birthday)
    # l: [Chuck Norris, Jon Skeet, John Cena]
    
    l.sort(key=lambda item: item.height)
    # l: [John Cena, Chuck Norris, Jon Skeet]
    

    dictsのリストの場合、概念は同じです:

    import datetime
    
    l = [{'name':'John Cena', 'birthday': datetime.date(1992, 9, 12),'height': 175},
     {'name': 'Chuck Norris', 'birthday': datetime.date(1990, 8, 28),'height': 180},
     {'name': 'Jon Skeet', 'birthday': datetime.date(1991, 7, 6), 'height': 185}]
    
    l.sort(key=lambda item: item['name'])
    # l: [Chuck Norris, John Cena, Jon Skeet]
    
    l.sort(key=lambda item: item['birthday'])
    # l: [Chuck Norris, Jon Skeet, John Cena]
    
    l.sort(key=lambda item: item['height'])
    # l: [John Cena, Chuck Norris, Jon Skeet]
    

    サブディクトで並べ替え:

    import datetime
    
    l = [{'name':'John Cena', 'birthday': datetime.date(1992, 9, 12),'size': {'height': 175, 'weight': 100}},
     {'name': 'Chuck Norris', 'birthday': datetime.date(1990, 8, 28),'size' : {'height': 180, 'weight': 90}},
     {'name': 'Jon Skeet', 'birthday': datetime.date(1991, 7, 6), 'size': {'height': 185, 'weight': 110}}]
    
    l.sort(key=lambda item: item['size']['height'])
    # l: [John Cena, Chuck Norris, Jon Skeet]
    

attrgetteritemgetterを使ってソートする方が良い

リストも使用して選別することができるattrgetteritemgetterオペレータモジュールから機能します。これらは、読みやすさと再利用性を向上させるのに役立ちます。下記は用例です、

from operator import itemgetter,attrgetter

people = [{'name':'chandan','age':20,'salary':2000},
          {'name':'chetan','age':18,'salary':5000},
          {'name':'guru','age':30,'salary':3000}]
by_age = itemgetter('age')
by_salary = itemgetter('salary')

people.sort(key=by_age) #in-place sorting by age
people.sort(key=by_salary) #in-place sorting by salary

itemgetterはインデックスをitemgetterこともできます。これは、タプルのインデックスに基づいてソートする場合に便利です。

list_of_tuples = [(1,2), (3,4), (5,0)]
list_of_tuples.sort(key=itemgetter(1))
print(list_of_tuples) #[(5, 0), (1, 2), (3, 4)]

オブジェクトの属性でソートする場合は、 attrgetter使用します。

persons = [Person("John Cena", datetime.date(1992, 9, 12), 175),
           Person("Chuck Norris", datetime.date(1990, 8, 28), 180),
           Person("Jon Skeet", datetime.date(1991, 7, 6), 185)] #reusing Person class from above example

person.sort(key=attrgetter('name')) #sort by name
by_birthday = attrgetter('birthday')
person.sort(key=by_birthday) #sort by birthday
  1. clear() - リストからすべての項目を削除します。

    a.clear()
    # a = []
    
  2. 複製 - 既存のリストを整数で掛け合わせることで、元の数多くのコピーからなるより大きなリストが生成されます。これは、リストの初期化などに便利です。

    b = ["blah"] * 3
    # b = ["blah", "blah", "blah"]
    b = [1, 3, 5] * 5
    # [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5]
    

    あなたのリストにオブジェクトへの参照が含まれている場合(リストのリストなど)は、 Common Pitfalls - List乗算と共通参照を参照してください

  3. 要素の削除 - delキーワードとスライス表記を使用して、リスト内の複数の要素を削除することができます。

    a = list(range(10))
    del a[::2]
    # a = [1, 3, 5, 7, 9]
    del a[-1]
    # a = [1, 3, 5, 7]
    del a[:]
    # a = []
    
  4. コピー

    デフォルトの割り当て "="は、元のリストの参照を新しい名前に割り当てます。つまり、元の名前と新しい名前の両方が同じリストオブジェクトを指しています。いずれかを介して加えられた変更は、別のものにも反映されます。これはしばしばあなたが意図したものではありません。

    b = a
    a.append(6)
    # b: [1, 2, 3, 4, 5, 6]
    

    リストのコピーを作成する場合は、以下のオプションがあります。

    スライスすることができます:

    new_list = old_list[:]
    

    組み込みのlist()関数を使うことができます:

    new_list = list(old_list)
    

    一般的なcopy.copy()を使うことができます:

    import copy
    new_list = copy.copy(old_list) #inserts references to the objects found in the original.
    

    これは、old_listのデータ型を最初に見つけ出さなければならないので、list()より少し遅いです。

    リストにオブジェクトが含まれていて、それらもコピーしたい場合は、generic copy.deepcopy()を使用します。

    import copy
    new_list = copy.deepcopy(old_list) #inserts copies of the objects found in the original.
    

    明らかに最も遅く、最もメモリを必要とする方法ですが、時には避けられないものです。

Python 3.x 3.0

copy() - リストの浅いコピーを返します。

    aa = a.copy()
    # aa = [1, 2, 3, 4, 5]