这是原始列表:
ticket_list=
["AI567:MUM:LON:014",
"AI077:MUM:LON:056",
"BA896:MUM:LON:067",
"SI267:MUM:SIN:145",
"AI077:MUM:CAN:060",
"SI267:BLR:MUM:148",
"AI567:CHE:SIN:015",
"AI077:MUM:SIN:050",
"AI077:MUM:LON:051",
"SI267:MUM:SIN:146"]
我试图从中生成一个子列表,如下所示:
['AI077:077', 'AI077:077', 'AI077:077', 'AI077:077', 'AI567:567', 'AI567:567', 'BA896:896', 'SI267:267', 'SI267:267', 'SI267:267']
我已经成功地生成了列表,现在我正试图根据**“:”之后的值来计算排序后的列表**的总和
预期输出:
[AI077:308, AI567:1134, BA896:896, SI267:801]
我的代码:
def find_passengers_per_flight():
flight_name=[]
flight_passenger=[]
"""
In the list, details should be provided in the format:
[flight_no:no_of_passengers, flight_no:no_of_passengers, etc.]."""
for t in ticket_list:
res=''
res = re.search(r"[A-Z]*\d*|[a-z]*\d*",t).group()
flight_name.append(res)
for i in flight_name:
new_str=''
res2 = re.search(r"\d+",i).group()
new_str+=':'+res2
flight_passenger.append(i+new_str)
print(sorted(flight_passenger))
我的输出:
['AI077:077', 'AI077:077', 'AI077:077', 'AI077:077', 'AI567:567', 'AI567:567', 'BA896:896', 'SI267:267', 'SI267:267', 'SI267:267']
使用
defaultdict
会更容易,如果您坚持让输出作为一个列表,请稍后转换:如果您使用的是Python<;=3.6,则不能保证输出的顺序总是相同的,我认为这无关紧要。你知道吗
如果你真的想汇总航班号,你可以直接从原始数据中创建元组,并将它们汇总成dict:(使用defaultdict更好)
输出:
不过,我觉得有点奇怪的是,你似乎用了航班名称中的航班号来计算乘客人数——你不应该计算每个航班售出的机票吗?
点票:
输出:
您还可以使用排序列表中的groupby from itertools对您的航班进行分组,并对其进行评估,如下所示:
看起来好像你在把航班号加在一起,但是我想你应该把乘客总数加在一起,就像这样:
因此
tickets
返回:相关问题 更多 >
编程相关推荐