タグ付けされた質問 「list-comprehension」

数学的なセットビルダー表記に似たスタイルでリストを作成する簡潔な方法を提供する構文構造。複数の言語がリスト内包表記をサポートしているため、このタグをプログラミング言語のタグと組み合わせて使用​​してください。

7
列挙型内部リスト内包表記を使用するPython
私がこのようなリストを持っているとしましょう: mylist = ["a","b","c","d"] インデックスと一緒に出力された値を取得するには、次のenumerateようなPythonの関数を使用できます >>> for i,j in enumerate(mylist): ... print i,j ... 0 a 1 b 2 c 3 d >>> 今、私がそれを内部で使用しようとすると、list comprehensionこのエラーが発生します >>> [i,j for i,j in enumerate(mylist)] File "<stdin>", line 1 [i,j for i,j in enumerate(mylist)] ^ SyntaxError: invalid syntax だから、私の質問は、列挙型内部リスト内包表記を使用する正しい方法は何ですか?

6
リスト内包表記の例外を処理する方法は?
私はいくつかのリストの理解をPythonで持っていますが、各反復で例外がスローされる可能性があります。 たとえば、私が持っている場合: eggs = (1,3,0,3,2) [1/egg for egg in eggs] ZeroDivisionError3番目の要素で例外が発生します。 この例外を処理してリスト内包表記の実行を継続するにはどうすればよいですか? 私が考えることができる唯一の方法はヘルパー関数を使用することです: def spam(egg): try: return 1/egg except ZeroDivisionError: # handle division by zero error # leave empty for now pass しかし、これは私には少し厄介に見えます。 Pythonでこれを行うより良い方法はありますか? 注: これは私が考案した単純な例(上記の「例」を参照)です。私の実際の例にはいくつかのコンテキストが必要なためです。エラーゼロによる除算を回避するのではなく、リスト内包の例外を処理することに興味があります。

6
リスト内包表記は、内包範囲の後でさえ名前を再バインドします。これは正解?
内包には、スコーピングとの予期しない相互作用がいくつかあります。これは予想される動作ですか? 私はメソッドを持っています: def leave_room(self, uid): u = self.user_by_id(uid) r = self.rooms[u.rid] other_uids = [ouid for ouid in r.users_by_id.keys() if ouid != u.uid] other_us = [self.user_by_id(uid) for uid in other_uids] r.remove_user(uid) # OOPS! uid has been re-bound by the list comprehension above # Interestingly, it's rebound to the last uid in …

10
リストアイテムを印刷するPythonの方法
Pythonリストのすべてのオブジェクトを印刷する方法がこれよりも優れているかどうかを知りたいです。 myList = [Person("Foo"), Person("Bar")] print("\n".join(map(str, myList))) Foo Bar 私はこの方法を読むのは本当に良くありません: myList = [Person("Foo"), Person("Bar")] for p in myList: print(p) 次のようなものはありませんか? print(p) for p in myList そうでない場合、私の質問は...なぜですか?包括的なリストでこの種のことを行うことができるなら、リスト外の単純なステートメントとしてはどうでしょうか?

7
副作用のためにリスト内包表記を使用するのはPythonicですか?
戻り値ではなく、副作用のために呼び出す関数について考えてください(画面への出力、GUIの更新、ファイルへの出力など)。 def fun_with_side_effects(x): ...side effects... return y さて、リストの内包表記を使用してこの関数を呼び出すのはPythonicですか? [fun_with_side_effects(x) for x in y if (...conditions...)] リストはどこにも保存しないことに注意してください または、このfuncを次のように呼び出す必要があります。 for x in y: if (...conditions...): fun_with_side_effects(x) どちらがより良いのですか、そしてなぜですか?

5
ifステートメントで理解をリスト
2つのイテラブルを比較し、両方のイテラブルに表示されるアイテムを印刷します。 >>> a = ('q', 'r') >>> b = ('q') # Iterate over a. If y not in b, print y. # I want to see ['r'] printed. >>> print([ y if y not in b for y in a]) ^ しかし、それ^が配置されている場所に無効な構文エラーが表示されます。このランバ関数の何が問題になっていますか?

2
パンダのforループは本当に悪いのですか?いつ気にすべきですか?
あるforループは、実際には「悪いですか」?そうでない場合、どのような状況で、従来の「ベクトル化された」アプローチを使用するよりも優れていますか?1 私は「ベクトル化」の概念と、パンダが計算を高速化するためにベクトル化された手法をどのように使用するかをよく知っています。ベクトル化された関数は、シリーズ全体またはDataFrame全体に操作をブロードキャストし、従来のデータの反復よりはるかに高速化します。 しかし、forループとリスト内包表記を使用してデータをループすることを含む問題の解決策を提供する多くのコード(Stack Overflowでの回答を含む)を提供していることに驚いています。ドキュメントとAPIは、ループは「悪い」ものであり、配列、系列、またはデータフレームを反復することは「決して」すべきではないと述べています。それで、ループベースのソリューションを提案しているユーザーを時々見るのはなぜですか? 1-質問がいくぶん広範に聞こえることは事実ですが、forループは通常、従来のデータの反復よりも優れているという非常に特殊な状況があります。この投稿は、後世のためにこれを捉えることを目的としています。


6
リスト内包Pythonの2つのforループをフレーム化する方法
以下の2つのリストがあります tags = [u'man', u'you', u'are', u'awesome'] entries = [[u'man', u'thats'],[ u'right',u'awesome']] にあるentriesときにエントリを抽出したいtags: result = [] for tag in tags: for entry in entries: if tag in entry: result.extend(entry) 2つのループを単一行リスト内包表記としてどのように書くことができますか?

17
Rubyの内包表記を一覧表示する
Pythonリスト内包表記に相当することを行うには、次のようにします。 some_array.select{|x| x % 2 == 0 }.collect{|x| x * 3} これを行うより良い方法はありますか...おそらく1つのメソッド呼び出しで?

3
Pythonリスト内包表記では、アイテムインデックスにアクセスできますか?
次のPythonコードを考えてみましょう。これを使用して、list2インデックスが1から3のすべてのアイテムを新しく追加しますlist1。 for ind, obj in enumerate(list1): if 4 > ind > 0: list2.append(obj) 列挙を通じてインデックスにアクセスできない場合、リスト内包表記を使用してこれをどのように記述しますか? 何かのようなもの: list2 = [x for x in list1 if 4 > ind > 0] でもind番号がないので、これでいいのでしょうか? list2 = [x for x in enumerate(list1) if 4 > ind > 0]

5
リスト内包表記:各アイテムに対して2つ(またはそれ以上)のアイテムを返す
リスト内包の項目ごとに2つ以上の項目を返すことはできますか? 私が欲しいもの(例): [f(x), g(x) for x in range(n)] 戻るはずです [f(0), g(0), f(1), g(1), ..., f(n-1), g(n-1)] したがって、このコードブロックを置き換えるもの: result = list() for x in range(n): result.add(f(x)) result.add(g(x))

3
リスト内包表記を使用したネストされたForループ
2つの文字列が'abc'あり、、の場合、'def'2つのforループを使用してそれらのすべての組み合わせを取得できます。 for j in s1: for k in s2: print(j, k) ただし、リスト内包表記を使用してこれを実行できるようにしたいと思います。私は多くの方法を試しましたが、それを得ることができませんでした。誰かがこれを行う方法を知っていますか?

3
Pythonインタープリターにとってのバックティックの意味: `num`
私はリスト内包表記で遊んでいて、別のサイトでこの小さなスニペットに出くわしました: return ''.join([`num` for num in xrange(loop_count)]) `num`ビットを壊すことに気付く前に、(タイピングによって)関数を複製するのに数分費やしました。 これらの文字でステートメントを囲むとどうなりますか?私が見ることができるものから、それはstr(num)と同等です。しかし、私が時間を計ったとき: return ''.join([str(num) for num in xrange(10000000)]) 4.09秒かかりますが、 return ''.join([`num` for num in xrange(10000000)]) 2.43秒かかります。 どちらも同じ結果になりますが、1つはかなり遅くなります。ここで何が起こっているのですか? 編集:奇妙なことに... repr()は、よりも少し遅い結果を与え`num`ます。2.99秒vs 2.43秒。Python 2.6を使用します(3.0はまだ試していません)。

10
forループで未使用の変数を宣言する方法を教えてください。
私がこのようなリスト内包表記を持っている場合(たとえば): ['' for x in myList] リスト内のすべての要素に対して空の文字列を持つ新しいリストを効果的に作成するために、私は決して使用しませんx。未使用のx変数を宣言する必要がないように、これを書くためのよりクリーンな方法はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.