我正在制作一段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 ')
我已经研究了一段时间,但是还没有能够提出一个解决方案来反转列表,以便首先显示汽车名称,同时保持元组按速度排序。
任何帮助将不胜感激!谢谢!
答案 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)'
这称为“反向切片”。它是最小的,但它适用于几乎是序列的任何内容,或者包含项的多个部分,例如tuple
或list
。您可以阅读有关逆转here的更多信息。
答案 2 :(得分: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])
您可以拥有(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