メソッドによってはリスト以外でも対応できるかもしれませんがここでは宿題として出されたプロジェクトの一環として調べていただけなのであえてリストと指定した。
リストに指定したものが含まれているか確認したい時
if myItem in list: #if myItem not in listも可
# do something
myset = set()
myset.add(item)
理由はわかりませんがセットのほうがいいようです。恐らくリストの中身に入れる数の量やリストの順番と深く関係しているような気がしますが。
どうやらタプル、セット、ディクショナリに上手く適用できるようです。ちなみにstackoverflowのコメントによるとin
というのはlist.__contain__
というメソッドを呼んで動かしているらしいのでこれをクラスに応用できるんだとか。例はサイトより引用
>>> class ContainsEverything:
def __init__(self):
return None
def __contains__(self, *elem, **k):
return True
>>> a = ContainsEverything()
>>> 3 in a
True
>>> a in a
True
>>> False in a
True
>>> False not in a
False
>>>
リストの中のストリング数字が全て数字か確かめて全て数字に変えたい。
myList = [1,2,3,4,5,"apple", 9, "orange"]
みたいなのがあったときにどうやってリストが数字を含んでいるか確かめたい。
mynewlist = [s for s in mylist if s.isdigit()]
こういうやり方もあるようです。str
としてではなくint
として返ってきますが。
new_list = []
for value in mylist:
try:
new_list.append(int(value))
except ValueError:
continue
try:
new_list.append(str(int(value)))
を足せば
ここによるとvar.isdigit()
はもし全てのストリング値の中身が数字で且つリストの中に1つ以上ストリンが入っていればTrue
を返しそうでないならFalse
を返す。
結局どのやりかたが一番早いのか
詳しくはここを参考に。
3.8秒
a = [4,2,3,1,5,6]
if a.count(7) == 1:
b=a.index(7)
"Do something with variable b"
1.9秒
a = [4,2,3,1,5,6]
try:
b=a.index(7)
except ValueError:
"Do nothing"
Else:
"Do something with variable b"
2.74秒
a = [4,2,3,1,5,6]
if 7 in a:
a.index(7)
ちなみにセットでやると処理速度が更に早くなるとか。
この文脈でいくなら結局7 in a
が一番早いのではないかという結論に。