14

私は2つのリストを持っています:

first_lst = [('-2.50', 0.49, 0.52), ('-2.00', 0.52, 0.50)]
second_lst = [('-2.50', '1.91', '2.03'), ('-2.00', '1.83', '2.08')]

私はそれに次の計算をしたい:

(およびからの対応する値) を乗算し0.49、(対応する値も)を乗算します。対応する各タプルの位置の値が同一であるという条件の下でそれを行いたいので、 ==などです。明らかに、残りのタプルについても同じ計算を行います。1.91first_lstsecond_lst0.522.030-2.50-2.50

私のコード:

[((fir[0], float(fir[1])*float(sec[1]), float(fir[2])*float(sec[2])) for fir in first_lst) for sec in second_lst if fir[0] == sec[0]]

ただし、いくつかのオブジェクトを生成します:

[<generator object <genexpr> at 0x0223E2B0>]

コードの修正を手伝ってもらえますか?

4

5 に答える 5

23

orを使用して、そのジェネレータ式をtuple()orlist()に変換する必要があります。listtuple

[tuple((fir[0], fir[1]*sec[1], fir[2]*sec[2]) for fir in first_lst)\
                               for sec in second_lst if fir[0] == sec[0]]

コードの作業バージョン:

>>> first_lst = [tuple(float(y) for y in x) for x in first_lst]
>>> second_lst = [tuple(float(y) for y in x) for x in second_lst]

>>> [((fir[0],) + tuple(x*y for x, y in zip(fir[1:], sec[1:]))) \
                  for fir in first_lst for sec in second_lst if fir[0]==sec[0]]
[(-2.5, 0.9359, 1.0555999999999999), (-2.0, 0.9516000000000001, 1.04)]
于 2013-05-04T10:55:49.570 に答える
2

first_lstあなたのとsecond_lstが次のように定義されていることを考慮してください。

>>> first_lst = [('-2.50', '0.49', '0.52'), ('-2.00', '0.52', '0.50')]
>>> second_lst = [('-2.50', '1.91', '2.03'), ('-2.00', '1.83', '2.08')]

次のリスト内包表記が役立つ場合があります。

>>> [tuple((float(elem[0][0]), float(elem[0][1])*float(elem[1][1]), float(elem[0][2])*float(elem[1][2]))) for elem in zip(first_lst, second_lst) if elem[0][0]==elem[1][0]]
[(-2.5, 0.9359, 1.0555999999999999), (-2.0, 0.9516000000000001, 1.04)]
于 2013-05-04T11:07:22.857 に答える