締切済み

Pythonのanyって何?

  • すぐに回答を!
  • 質問No.9503120
  • 閲覧数171
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 89% (347/388)

下のPythonのプログラムにおいて、any()とは何をしているんでしょうか。たしかに取ると動かなくなります。

$ cat fruits.txt
Banana
Orange
Navel
Strawberry
Apple
$ cat fruits.txt | python -c 'import sys; any(print(l,end="") for l in sorted(sys.stdin))'
Apple
Banana
Navel
Orange
Strawberry
$

回答 (全1件)

  • 回答No.1

ベストアンサー率 59% (443/749)

 まず、any関数の意味です。この関数は、引数にイテレータをとります。そして、その中の一つでもtrueなら、trueを返します。
 この使い方は、器用ですね。正直、any関数の意味なんてお構いなしに見えます。戻り値もどうでもよい。ただ、イテレータを取り、何の副作用も無いという関数が欲しかった。つまり、関数の構文だけが欲しかったようです。その理由は、ジェネレータを使いたかったから。ジェネレータの中でprint文を利用して必要な出力をしてしまったのは良いが、ジェネレータはあくまでイテレータを返しますから、そのイテレータを捨てるゴミ箱が欲しかったと言った感じです。
 ジェネレータを使うにしても、
 print("".join(l for l in sorted(sys.stdin)))
 の方が素直な気がします。
 と考えれば、もともとsortedはリストを返すわけで・・・
 print("".join(sorted(sys.stdin)))
 でも、結果は一緒ですねぇ・・・
 何故にこんな面倒なことをしたのやら?
お礼コメント
TYWalker

お礼率 89% (347/388)

ありがとうございます!

joinなるほどですね。

上のプログラムはブログで発見したのですが、もとは
python -c 'import sys; any(print(l,end="") for l in sorted(sys.stdin.readlines()))'
で、他のブログに「sys.stdinにreadline()、readlines()は不要」と書かれていたので取ったものです。

他のブログを見ても、forをanyで囲ったものが多くありますが、コピペの源流を知りたいです。。

python -c 'import sys; [print(l,end="") for l in sorted(sys.stdin)]'

というのもありました。

python -c 'import sys; print(*sorted(sys.stdin), sep="")'

というのもいけるっぽいですね。

でもjoinを使ったやり方が、何をしているのかはっきり分かって、短くて好きです^^
投稿日時 - 2018-05-31 13:23:54
感謝経済
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


感謝指数をマイページで確認!

ピックアップ

ページ先頭へ