0

タプルのリストが 2 つあります。

old = [('6.454', '11.274', '14')] 
new = [(6.2845306, 11.30587, 13.3138)]

私は同じ位置からの各値を比較したいと思います(6.454に対して6.2845306など) 。タプルoldからの値がタプルからの値よりも大きい場合は、newそれを出力します。

正味の効果は次のようになります。

6.454, 14 

私は簡単なifステートメントを使用してそれを行いました

if float(old[0][0]) > float(new[0][0]):
    print old[0][0],
if float(old[0][1]) > float(new[0][1]):
    print old[0][1],
if float(old[0][-1]) > float(new[0][-1]):
    print marathon[0][-1]

常に 3 要素または 2 要素のタプルがあるため、ここでスライスを使用しても大きな問題にはなりませんが、リスト内包表記というより洗練された解決策を探しています。助けてくれてありがとう。

4

4 に答える 4

2

したがって、次のようなものが必要です。

print [o for o,n in zip(old[0],new[0]) if float(o) > float(n)]
于 2013-04-26T18:31:26.030 に答える
2

組み込み関数を使用しますzip:

for x,y in zip(old[0],new[0]):
    if float(x)>float(y):
        print x,
   ....:         
6.454 14

タプルの長さが等しくない場合はzip、2 つのうち短い方までしか比較されません。itertools.izip_longest

ヘルプzip:

In [90]: zip?
Type:       builtin_function_or_method
String Form:<built-in function zip>
Namespace:  Python builtin
Docstring:
zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]

Return a list of tuples, where each tuple contains the i-th element
from each of the argument sequences.  The returned list is truncated
in length to the length of the shortest argument sequence.
于 2013-04-26T18:31:51.220 に答える
2
[o for o,n in zip(old[0], new[0]) if float(o) > float(n)]

これはうまくいくはずですか?

于 2013-04-26T18:32:08.670 に答える
1

これを試して:

for i in range(len(old)):
    for j in range(len(old[i]):
        if old[i][j]>new[i][j]:
            print old[i][j]
于 2013-04-26T18:32:28.477 に答える