0

我有两个元组列表:

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只会比较两者中较短的一个,您可以使用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 回答