向后打印元组

时间:2015-12-23 01:56:28

标签: python tuples

我正在制作一段Python代码,其中包括允许用户输入3种不同车型的最高速度,然后打印出按升序排序的汽车名称和最高速度。

到目前为止,已经创建了两个列表

carName= ["Ferrari", "Lambo", "Porsche"]

carSpeed= ["245.5794", "242.4616", "318.1555"]

使用

carSpeed 四舍五入到小数点后两位
carSpeedTwoDP= ['%.2f' % elem for elem in carSpeed]

该列表以及 carName 已被制作为元组

carSpeedSorted= sorted(zip(carSpeed, carName))

然后我用

打印出元组
for i in range (3):
    print "%s"% (carSpeedSorted[i],)
然而,这引起了一个问题。该表应该显示

Lambo 242.46
Ferrari 245.58
Porsche 318.16

但是因为速度是元组中的第一个(因为列表必须按升序速度排序,而元组按照它们可以找到的第一个元素进行排序),显示如下:

('242.46', 'Lambo')
('245.58', 'Ferrari')
('318.16', 'Porsche ')

我已经研究了一段时间,但是还没有能够提出一个解决方案来反转列表,以便首先显示汽车名称,同时保持元组按速度排序。

任何帮助将不胜感激!谢谢!

6 个答案:

答案 0 :(得分:1)

您可以先将汽车名称放在首位,然后使用每个元组的 second 元素作为关键字进行排序:

from operator import itemgetter
carSpeedSorted = sorted(zip(carName, carSpeed), key=itemgetter(1))

现在:

for a in carSpeedSorted:
    print '%s' % (a,) 
('Lambo', '242.4616')
('Ferrari', '245.5794')
('Porsche', '318.1555')

<强>参考文献:

答案 1 :(得分:1)

反转切片操作符发生了什么?

print (0, 1, 2)[::-1]
# Outputs '(2, 1, 0)'

这称为“反向切片”。它是最小的,但它适用于几乎是序列的任何内容,或者包含项的多个部分,例如tuplelist。您可以阅读有关逆转here的更多信息。

答案 2 :(得分:1)

您的问题有两种解决方案。

1。修复打印

有办法做到这一点:

carSpeedSorted[i] = ('242.46', 'Lambo')

print "{1} {0}".format(*carSpeedSorted[i])

# or:
print "%s %s" % (carSpeedSorted[i][1], carSpeedSorted[i][0])

# or:
speed, name = carSpeedSorted[i]
print "%s %s" % (name, speed)

# or:
print "%(name)s %(speed)s" % dict(speed=carSpeedSorted[i][0], 
                                  name=carSpeedSorted[i][1])

2。修复排序

您可以拥有(name, speed)个元组,但仍然按速度排序,例如:

sorted(name_speed_tuples, key=lambda name_speed: name_speed[1])
顺便说一下,你确定要按速度排序按字母顺序

在您的代码中,速度'1000.00'将在'200.00'之前!

我建议使用round来舍入数字,而不是创建字符串。这样可以解决问题。

carSpeedTwoDP= [round(elem,2) for elem in carSpeed]

答案 3 :(得分:0)

实际上,您可以非常轻松地按元组的第二个元素进行排序:

sorted(zip(carName, carSpeed), key=lambda x: (x[1], x[0]))

上述方法按照其速度的升序对元组列表进行排序,如果是绘制,则名称较小的元组首先出现。

答案 4 :(得分:0)

为什么不按要求的顺序打印呢?

print( "%s %s" %(carSpeedSorted[i][1],carSpeedSorted[i][0]))

<强>输出

Lambo 242.4616
Ferrari 245.5794
Porsche 318.1555

答案 5 :(得分:0)

其他人正确地指出,您可以在不反转项目的情况下进行排序,但是如果您想在SessionFactory处于&#34;错误&#34;订单,它并不难,只需反转tuple(并使格式字符串打印两部分):

tuple