如何在Python中使用分隔符“:”将列表中的单个元素(由两个值组成)连接起来?

如何在Python中使用分隔符“:”将列表中的单个元素(由两个值组成)连接起来?,python,python-3.x,list,function,Python,Python 3.x,List,Function,我的清单如下: 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"] 我必须找到每个航班的乘客人数,但我无法加入计数和

我的清单如下:

 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"]
我必须找到每个航班的乘客人数,但我无法加入计数和元素:在最终列表中。我已经给出了下面的函数,注释用于描述和输出格式

 def find_passengers_per_flight():
'''Write the logic to find and return a list having number of passengers traveling per flight based on the details in the ticket_list
In the list, details should be provided in the format:
[flight_no:no_of_passengers, flight_no:no_of_passengers, etc.].'''
listairline=[]
count=0
finallist=[]
for i in ticket_list:
    # listairline=[]
    list2=i.split(":")
    listairline.append(list2[0])
for elem in listairline:
    count=listairline.count(elem)
    if elem not in finallist:
        finallist.append(elem,":",count) #here it is the line which needs to be modified. Kindly help
print (finallist)    

在我看来,问题是要求你将答案转换成字符串,以获得与输入相同的格式。 您只需将行更改为:

finallist.append(elem + ":" + str(count))
用于计算每个航班的机票数量:

from collections import defaultdict

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"]

flight_ticket_counts = defaultdict(int)
for ticket in ticket_list:
    flight_no, *_ = ticket.split(":")
    flight_ticket_counts[flight_no] += 1

print([f"{k}:{v}" for k, v in flight_ticket_counts.items()])
# ['AI567:2', 'AI077:4', 'BA896:1', 'SI267:3']
或作为一个衬里使用:

如果您需要乘客数量,则可以修改上述方法:

flight_passenger_counts = defaultdict(int)
for flight in ticket_list:
    flight_no, _, _, no_passengers = flight.split(":")
    flight_passenger_counts[flight_no] += int(no_passengers)

print([f"{k}:{v}" for k, v in flight_passenger_counts.items()])
# ['AI567:29', 'AI077:217', 'BA896:67', 'SI267:439']

让我们用一个衬里来实现这一点:

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"]

[i+':'+str([i.split(':')[0] for i in ticket_list].count(i.split(':')[0])) for i in sorted(set([i.split(':')[0] for i in ticket_list])) ]
或者以更简单的方式:

res = [i.split(':')[0] for i in ticket_list]
res = [i+':'+str(res.count(i.split(':')[0])) for i in sorted(set(res)) ]
或者更快捷的方式:

from collections import Counter
res = Counter([i.split(':')[0] for i in ticket_list])
[i+':'+str(res[i]) for i in res]
以上各点说明:

['AI567:2', 'AI077:4', 'BA896:1', 'SI267:3']

那是一条效率很低的单行线。您在一次迭代中进行了三次拆分本身+在循环中使用count是额外的开销。我还发现以这种方式编写代码对可读性非常重要。在列表理解中使用count从来都不是一个好主意。对于较大的列表,这将是非常低效的。如果您帮助删除finallist中的重复元素,那么您的代码可能是正确的,因为代码也显示了重复的元素,但这不是op要求的。他只是想知道如何以正确的格式将答案插入列表。
['AI567:2', 'AI077:4', 'BA896:1', 'SI267:3']