pythonにおけるlist,tupleなどの秩序化シーケンス
4929 ワード
list
,tuple
およびstr
はいずれも順序付きシーケンスであり、後の両者とは異なるlist
は可変オブジェクトであるtuple
およびstr
は非可変オブジェクトである.主にこの3つの秩序あるシーケンスのいくつかの方法について話します.方法
効果
L1.append(var)
後に要素を追加
L1.pop(var)
該当する要素を返し、L 1から削除します.
L1.remove(var)
リスト内の値の最初の一致を削除
L1.sort()
リストがソートされます
L1.reverse()
リストの順序変更
L1.count(var)
リスト内の値の出現回数の計算
以上がリストでよく用いられる方法である、ここでL 1.remove()はfor....in….サイクル中に状況が現れます.例えば、20より大きい数を取って、20より小さいすべてを削除したいと思っています.
list2 = range(50)
for i in list2:
if i<20:
print "do something"
list2.remove(i)
print list2
結果は次のとおりです.
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
なぜならこの反復の過程でfor..inループはポインタ指示による
[0,1,2,….49] ^
最初のremoveの後、リストはこのような形式になり、
[1,2,3,4…49]^正しい結果を得るためには、このように書くことができます.
enumerate
、この内蔵関数はインデックスも要素も遍歴することができます.for i, n in enumerate(numbers):
if n < 20 :
print "do something"
numbers[i] = None
numbers = [n for n in numbers if n is not None]
tuple tupleは可変の秩序シーケンスであり,一度初期化すると修正できない.修正できないので
apeend()
などの方法がなく、その中の単一要素も削除できず、メタグループ全体しか削除できません.tup1 = (1, 4, 5, 3);
del tup1;
print tup1
#
NameError: name 'tup1' is not defined
文字列
str
文字列はpythonにおいて秩序あるシーケンスであり、これは文字列がpythonにおいて多くの操作を行うことができることを意味する.例えばslice
.ただし、可変オブジェクトであるため、文字列の一部は変更できません.文字列がよく遭遇する問題の一つは、文字列を逆順序で出力する方法です.この場合、
slice
文字列に使用して、逆順出力の関数を次のように記述できます.def reverse(x):
if not isinstance(x,basestring):
raise TypeError ("bad type");
else:
return x[::-1]
isinstance
パラメータが文字列であるか否かを判断するためのものであり、そうでなければ誤報となる.basestring
はいstr
とunicode
の親は、文字列の種類かどうかを見分けることができます.sliceこれは、秩序化されたシーケンスフラグメントを迅速に切り取る操作です.sliceの基本スタイル:slice(start,stop[,step])例えばlistを作る
L =range(100)
>>>[0,1,2,3.....99]
10~20の間の数をとる
L[10:21]
>>>[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
#
L[10:20:2]
>>> [10, 12, 14, 16, 18]
# 10
L[-10:]
>>>[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
tupleとstringも同様にsliceを使用することができ、得られた結果は依然としてtupleまたはstringである.
(0, 1, 2, 3, 4, 5)[:3]
>>>(0, 1, 2)
'ABCDEFG'[:3]
>>>'ABC'