今、話題の人工知能(AI)などで人気のPython。初心者に優しいとか言われていますが、全然優しくない! という事を、つらつら、愚痴っていきます

007.Pythonのデータ型2

»

初回:2018/09/19

0.今回のまとめ
 Pythonのデータ型として、str,int,float,bool,list(リスト),tuple(タプル)
dict(辞書型)というのがあります。list(リスト),tuple(タプル),dict(辞書型)も、それぞれ色々な特徴があり便利である一方、複雑怪奇な動きをします。

1.list(リスト)
 簡単に言うと、「順番を持った入れ物」です。
リストは、[ ] の中にカンマで区切られた要素で構成します。(※1

空のリストを作ります。

>>> lst01 = []
または
>>> lst01 = list()

>>> lst02 = [1,2,3,'A','B',[1,2],(3,4),True]
>>> lst02
[1, 2, 3, 'A', 'B', [1, 2], (3, 4), True]
>>>

>>> lst03 = list( 'A' )
>>> lst03
['A']
>>> lst04 = list( 'ABC' )
>>> lst04
['A', 'B', 'C']
>>> lst05 = list( 123 )
「それって、あなたの勝手な思い込みでしょ」(※2

listクラスで、文字列を引数に渡すと、個々に分割してリストにしてしまいます。直感的ではないのですが、1文字づつ処理する場合には、便利です。

リストに要素を追加するのは、append メソッドを使います。

>>> lst02.append( 'A' )
>>> lst02
[1, 2, 3, 'A', 'B', [1, 2], (3, 4), True, 'A']
>>> lst02.append( 'B' ).append( 'C' )
「いい加減にしてよね。何でも思い通りにはいかないのよ。」(※3

JavaのStringBuilderのappend メソッドは、戻り値に自分自身を返すので
lst02.append( 'B' ).append( 'C' ) のような記述が可能です。一方、Python では、戻り値が設定されていないため、上記のような書き方ができません。少しだけ不便な気がしますが、この辺りは、「誰が書いても同じ」という趣旨では、そうかもしれません。

追加ができるなら、削除もできます。

>>> lst03 = [10,20,30,40,50]
>>> lst03.remove(3)
「そんなこと、出来るわけないでしょ」(※4

remove メソッドは、要素の値を指定して削除します。要素の番号で削除したい場合は、popメソッドを使います。

>>> lst03 = [10,20,30,40,50]
>>> lst03.pop(3)
40
>>> lst03
[10, 20, 30, 50]
>>>

popメソッドの場合は、戻り値に、削除した値を返します。lst03.pop(0) なら、先頭要素を、引数無しのlst03.pop()なら最後の要素を削除(&取り出し)します。

リストのメソッドではないのですが、del文を使えば、複数要素を削除できます。

>>> lst03 = [10,20,30,40,50]
>>> del( lst03[3] )
>>> lst03
[10, 20, 30, 50]
>>>
>>> del( lst03[1:3] )
>>> lst03
[10, 50]
>>>

リストは、同じ要素を複数登録できます。
それらを削除するには、remove メソッドを使いますが、存在しない場合は、
「そんなこと、出来るわけないでしょ」(※5
と、怒られます。

例えば、in を使って、3が含まれている間、ループして削除する方法
>>> lst04 = [1,2,3,4,1,2,3,4,1,2,3,4]
>>> while( 3 in lst04 ):
... lst04.remove(3)
...
>>> lst04
[1, 2, 4, 1, 2, 4, 1, 2, 4]
>>>

または、3の数を数えて、その回数だけループして削除する方法
>>> lst04 = [1,2,3,4,1,2,3,4,1,2,3,4]
>>> for cnt in range( lst04.count(3) ) :
... lst04.remove(3)
...
>>> lst04
[1, 2, 4, 1, 2, 4, 1, 2, 4]
>>>

などが、考えられます。

この、for 文、python2 では、print文や、if文など、()なしで使用できていたのが、python3 では、print文では必須、if文ではあってもなくても実行でき、for 文には、()を付けるとエラーになります。

>>> for( cnt in range( lst04.count(3) ) ):
「カッコつけないでよ。」(※6

>>> print lst04
「カッコ悪いわね。ちゃんとカッコ付けてよ。」(※7

理屈じゃなく、彼女の好みを早く覚えないと、デートにも誘えません。

======= <<注釈>>=======

※1 リストの作成と初期化
 下記のURLが参考になります。
https://www.sejuku.net/blog/23633
【Python入門】listの使い方と使えるメソッドまとめ

※2 「それって、あなたの勝手な思い込みでしょ」
>>> lst05 = list( 123 )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>

※3 「いい加減にしてよね。何でも思い通りにはいかないのよ。」
>>> lst02.append( 'B' ).append( 'C' )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'append'
>>>

※4,※5 「そんなこと、出来るわけないでしょ」
>>> lst03.remove(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>>

※6 「カッコつけないでよ。」
>>> for( cnt in range( lst04.count(3) ) ):
File "<stdin>", line 1
for( cnt in range( lst04.count(3) ) ):
^
SyntaxError: invalid syntax

※7 「カッコ悪いわね。ちゃんとカッコ付けてよ。」
>>> print lst04
File "<stdin>", line 1
print lst04
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(lst04)?

http://coderoid.hatenablog.com/entry/2016/02/12/083000
Pythonのリスト(配列)の削除のまとめ。先頭、末尾、指定の位置、複数、一致する値、全削除

https://www.yoheim.net/blog.php?q=20150801
[Python] 何度も調べてしまうリスト操作をまとめてみた

Comment(5)

コメント

匿名

’A'
顔に見えてしょうがない!

ちゃとらん

コメントが付いたので、お叱りかと思い見ましたが、思わず、噴出しそうになりました。

いや、お叱りのコメントかな?

そんなことを言われると、私も、顔に見えてしょうがありません。

shiracamus

> python3 では、print文では必須、

python3 では print関数になったので、「引数指定の括弧」が必須です。
文には括弧が不要です。「算術優先演算の括弧」あるいは「タプルの括弧」を書いてもいいですが、文法は守らなければなりません。

shiracamus

>>> for (x, y) in (1, 2), (3, 4), ((5, 6), (7, 8)):
... print(x, y)
...
1 2
3 4
(5, 6) (7, 8)

ちゃとらん

print文ではなく、print関数なんですね。
勉強になります。
「もっと、私のこと、きちんと理解してよ」
す、すみません。
コメントにまで、出てくるんですね。

if文だから、もともと、カッコは不要、print関数なので、カッコが必要。
return 文は、文だから、カッコは不要・・・なかなか、いいですね。

コメントを投稿する