私はPythonでオブジェクトのリストを持っていて、それぞれはid
のプロパティを持っています。私はそれらのIDのリストを取得したい。Pythonに相当するC#の.Select?
C#では私はPythonでこれを行うだろうか
myObjects.Select(obj => obj.id);
を書くだろうか?
私はPythonでオブジェクトのリストを持っていて、それぞれはid
のプロパティを持っています。私はそれらのIDのリストを取得したい。Pythonに相当するC#の.Select?
C#では私はPythonでこれを行うだろうか
myObjects.Select(obj => obj.id);
を書くだろうか?
[obj.id for obj in myObjects]
:あなたのスタートリストが
original_list
と呼ばれ、新しいリストが
id_list
呼び出された場合
http://docs.python.org/tutorial/datastructures.html
を、あなたはこのような何かを行うことができます
ここでは、「リスト内包」のセクションをご覧ください:
id_list = [x.id for x in original_list]
これは大きなリストで、idsを一度処理するだけであれば、ジェネレータ式もあります。
ids = (obj.id for obj in my_objects)
for id in ids:
do_something(id)
ジェネレータ式は、ランダムアクセスをサポートしていませんが、必要に応じて各IDを取得するので、一度にリストを作成することはありません。リスト内包表記がrange
であるため、ジェネレータ式はxrange
になります。
ジェネレータ表現を含むもう1つの警告は、ジェネレータ表現が含まれているリソースがまだ開いている場合に限りアクセスできるということです。たとえば、次のコードは失敗します。
with open(filename) as f:
lines = (line for line in f)
# f is now closed
for line in lines:
print line
この場合、同等のリストの理解が有効です。 、彼らの権利を念頭に置い
誰もがこの次のようにしないだろうが、あなたがC#の直接対応はPythonで選択したい場合は、ここでそれはケースでは、より複雑な例
import operator
map(operator.attrgetter("id"), myObjects)
に便利になるさサードパーティのライブラリを使用する代償として、asqパッケージを使用して、Python iterablesよりもオブジェクトにインスピレーションを与えるLINQを提供することができます。あなたの質問でのC#コードASQ使用になる:
from asq.initiators import query
query(myObjects).select(lambda obj: obj.id)
または、ASQの別の特徴と組み合わせる:
from asq.selectors import a_
query(myObjects).select(a_("id"))
は右...リスト内包。それらについて忘れてしまった:) – mpen