• ベストアンサー

Pythonのリストで

Pythonのリストで質問があります list = [] if list and list[-1]: print("OK") if文をlist[-1]だけにするとindex out of rangeになるのに (これはわかります) if list and list[-1]:にするとIndexErrorにならないのでしょうか? プログラミング初心者です よろしくお願いします

noname#229382
noname#229382
  • Python
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

andは2つの条件式が共にTrueの場合にTrueを、それ以外の場合にFalseを返します。 なので、1つ目の条件式がFalseだった場合、2つ目の条件式を評価する必要はなくなります。 なので、エラーにならないのです。 ちなみに、空のリストは条件式としてはFalseとして扱われます。 (下記URLの4.1参照) https://docs.python.jp/3/library/stdtypes.html

noname#229382
質問者

お礼

参考になりました。 ありがとうございました。

関連するQ&A

  • 下記のpython の動きが分かりません。

    下記のpython の動きが分かりません。 よろしくお願い致します。 def print_list (data, index): if(index != len(data)): print(data [index]) print_list(data, index +1) some_list = [1,2,3,4,5] print_list(some_list, 0) 実行結果は、1       2       3       4       5

  • python リストのプログラムがうまくいかない

    閲覧ありがとうございます。 学校の講義にてgoogle colaboでpythonを使っています。 課題 複数の記事を読み込んで、行を記事、単語を列とした単語数カウントの行列を作成せよ (ファイルは 単語:単語数 単語:単語数... で、行末尾にnegativeとなっていて、1行に1記事ずつ入っている) import numpy as np import matplotlib.pyplot as plt with open('/content/drive/MyDrive/train.processed') as f: articles = f.readlines() # 記事を読み込む list_articles = [] # 記事単位のリスト list_words = [] # 単語単位のリスト list_count = [] # 単語数カウントの行列 x = len(articles) for article in articles: list_articles.append(article.split()) # 記事ごとに[単語:単語数]で配列に入れる(二次元) for i in range(x): # x=記事数 for j in range(len(list_articles[i])-1): # negativeを除いた1記事当たりの単語数 if not '::' in list_articles[i][j]: # 単語として[:]があるとバグるのでない場合のみ処理を行う(::3みたいになってる) col = list_articles[i][j].find(':') # 単語と単語数の間の:の位置を求める word = list_articles[i][j][:col] # コロン未満(単語部分)をwordに代入する if not word in list_words: # list_wordsにない場合、追加する list_words.append(word) list_count.append([0 for k in range(x)]) # 記事数分のリストを追加する(行列に1行追加) list_count[i][list_words.index(word)] = int(list_articles[i][j][col+1:]) # 何記事目かを行、何の単語かを列として単語数を代入 print(word) list_count[i][list_words.index(word)] = int(list_articles[i][j][col+1:]) ここでIndex out of rangeが出ます。print(word)で途中まで出力されるので、エラーが起きながら動いていたのか、途中でエラーが起きて止まったのかもわかりません。 色付きのプログラムを写真に添付します。 かなり時間をかけて考えたのですが、理解できなかったので質問させていただきました。 よろしくお願いします。

  • Python

    今日からPythonを学び始めた、超初心者です! とっても初歩的な質問で申し訳ないのですが、私の周りで聞ける人がいないので、どなたか助けていただけると嬉しいです。 Pythonの条件分岐の式で、例えば、 score=100 if score = = 100 : print ('よくできました’) とあった場合、2つの=の間や、100と:、またprintと( のスペースは空けてはいけないというルールなのでしょうか? どこがスペースを空けてよくて、どこがダメなのかを知りたいです。 このような質問をすみません。 よろしくお願いいたします。

  • Pythonについて

    Pythonで〇〇から〇〇の時に実行、 ということはできますか? if文を使うと if a <= 100: このように100以下のみ実行となりますが、 if a <= 100: if a >= 90: print("〇") else: print("×") else: print("×") aが90以上100以下の時、「◯」、それ以外の時「×」を出力するには上のような構文にすればいいですか? この構文より簡単な構文、もしくはより良い構文がある場合は教えてください。

  • python超初心者です(3時間目)。pythonで以下のようなランダ

    python超初心者です(3時間目)。pythonで以下のようなランダム数列を生成させるにはどうしたらいいのでしょうか? 最終結果のイメージ(16進数8桁の数列x20行): 0 : c39a29eb 1 : b26cc9bb 2 : 4c494e47 ... 19: 93c85836 以下のようにコードを組んでみたのですが、 > tmp = ws.join(list) > TypeError: sequence item 0: expected string, int found のようなエラーが出てしまいます。どうやら数字を連結しようとしてるのでダメなのかな?と思っています。 ======================================== #! /usr/bin/python import random list = [] ws = "" for i in range (20): print i, ":", for j in range(8): list.append(random.randint(0,15)) tmp = ws.join(list) print tmp list = [] tmp = "" ======================================== ※ printでは必ずスペースが入ってしまうので、それを嫌う場合配列に入れて、要素を連結させなくてはならない、とwebにあったので、その方向で試してみました。 ※ また、ここではあくまでrandom を使用し、一文字(0,1,2,...E,F)づつ出力させたいと思っています。 なお、perlでは以下のように書くことができたのですが... ======================================== #! /usr/bin/perl for($i=0; $i<20; $i++){ printf ("%-02s: ", $i); for($j=0; $j<8; $j++){ printf("%x", int(rand(15)) ); } print "\n"; } ======================================== ※ んー第二言語としてpythonを学習してみていますが道のり険しそうです(やっぱrubyにしようか)... 宜しくお願い致します。

  • python ですが下記のプログラムがエラーになり

    python ですが下記のプログラムがエラーになります。どうしてでしょうか。よろしくお願い致します。 def revers(data): for index in range(len (data)-1,-1,-1): yield data[index] some_list = [‘a’, ‘b’, ‘c’, ‘d’] for e in revers(some_list): print(e) 実行結果をd      c      b      a にしたいのですがエラーがでます。

  • VBAからPythonを動かしたいのですが…

    いつもお世話になっております。 icevainと申します。 python超初心者です。 【質問】 『VBAでPythonを動かす』という興味のあるサイトを見つけました。 https://qiita.com/O_LUPAN/items/1ceb5c950ff40f3558ab サイトのpythonコード #ここから import sys def sum(suji1, suji2): return suji1 + suji2 if __name__ == "__main__": argv = sys.argv suji1 = str(argv[1]) suji2 = str(argv[2]) total = sum(suji1, suji2) print(total) #ここまで サイトのpythonコードを無理やり変更して、 #ここから import sys def sum(suji1, suji2): rst="OK" return rst if __name__ == "__main__": argv = sys.argv suji1 = str(argv[1]) suji2 = str(argv[2]) total = sum(suji1, suji2) print(total) #ここまで OKがかえってくると思ったのですが、 0がかえってきてしまいます。 OKをかえすにはどうすればよいのかわかりません。 お分かりの方おりましたらご協力お願い致します。

  • Python:空集合の判定 == set():

    次のPythonコードはある練習問題の一部です fruitsという集合に対して、入力を1つづつしていくと、集合が空になります その空になったときの変数をprintしたら set() が出ました そこで if fruits == set(): というif文を判定用に入れたら、print("OK")に飛び OK が出ました 質問: 1)集合が空のとき if fruits == set(): で判定する書き方は、正しい(一般的)でしょうか? 2) if fruits == {}: ではジャッジされないのはなぜでしょうか ちなみにAIに1)が判定されてOKが出るのは、空集合は set()だから(そういう仕様だから)との回答が出ましたが、いまいち正しいのかわかりません #code fruits ={1,2,3,4,5,6} for i in range(6): fruit = int(input()) fruits.discard(fruit) # 要素が存在してもいなくても削除 #print(fruits) #最後に set() が主力 if fruits == set(): print('OK') #入力 1 2 3 4 5 6 【回答上のご注意】 回答は、解答(答え)を求めています わたしはプログラマーではありません なので昭和的な「自分で考えろ」的なものは求めていません わからなければ答えない自由があなたにはあります 不明点があれば説明いたします

  • pythonについて

    pythonについて質問があります。 下記の組み合わせプログラムで、comb'(n,m)のn.mをループさせて、m=1から5、n=1から5のようにループさせたいと思っています。 どなたかご教授ください。 def comb(n, m, a = []): if m == 0: print a elif n == m: print range(1, m + 1) + a else: comb(n - 1, m, a) comb(n - 1, m - 1, [n] + a) よろしくお願いします。

  • Pythonでリストの要素の順番を入れ替え、結合したい

    Pythonでリストの要素の順番を入れ替え、結合したい 以下のようなリスト(入力list)があります。"1"もしくは"2"が出てきたら、それぞれ次の要素と順番を入れ替え、かつ1つの要素に結合するスクリプトを書きたいのですが、案はありますでしょうか。以下の出力listのような出力を望んでいます。 入力 list=['a', 'b', '1', 'c', 'd', 'e', '2', 'f', '2', 'g'] 出力 list=['a', 'b', 'c1', 'd', 'e', 'f2', 'g2'] 1や2が出てくる回数はリストにより異なり、また1より2の方が先に出てくる場合もあります。またリストによっては1がない場合、2がない場合もあります。(ただし '1', '2' のように1と2が連続で出てくることはありません。かならず間に別の要素が入ります) indexを使って要素の順番の入れ替えはできるようなのですが、最初に出てきたものしかとらえないので、例えば上の例でいうと2,gがg2に変換されません。また結合もできていませんが、indexを使った入れ替え方法を一応以下に記しておきます: i=list.index("1") j=list.index("2") list[i],list[i+1]=list[i+1],list[i] list[j],list[j+1]=list[j+1],list[j] とすると、出力リストは['a', 'b', 'c', '1', 'd', 'e', 'f', '2', '2', 'g']となります。 (最後のg2が変換できていない。また結合もできていない) Python初心者です。よろしくお願いします。

専門家に質問してみよう