繁体   English   中英

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

[英]How to join a single element (consisting of two values) in a list with a seperator “:” in Python?

我有一个清单如下:

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

我必须找到每个航班的乘客人数,但我无法将 count 和 elem 与:一起加入决赛名单。 我在下面给出了 function 和注释用于描述和 output 格式。

 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)    

使用collections.defaultdict计算每个航班的票数:

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

或使用collections.Counter作为单线:

from collections import Counter

flight_ticket_counts = Counter(ticket.split(":")[0] for ticket in ticket_list)

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

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

finallist.append(elem + ":" + str(count))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM