如何对一组字符串的元素进行分组

2024-07-05 11:03:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一根弦,像:

"Hotel_Rooms: R15,R11,R5,R4,R8,R2,R15,R3,R6,R1,R6,R5,R3,R2,R4,R1,R2,R5,R1,R4,R3,R6,R8,R4,R3,R1,R5,R6,R2"

我试着列一个相同的清单。这是我的密码:

List = []
ls = []
for el in input:
  if el == 'Hotel_Rooms: ':
      pass
  else:
    if el !=',': 
      ls.extend(el)
    else:
      List.append(ls)
print List

但结果很奇怪。你能告诉我如何改进我的代码吗?你知道吗

谢谢


Tags: ifelhotellselselistr2r3
3条回答

您的代码当前只是遍历输入字符串,并将逗号与其他字符分隔到不同的列表中。我不认为那是你想要的。好像你想把相似的房间分组。您可以使用^{}来实现:

from collections import defaultdict

s = "Hotel_Rooms: R15,R11,R5,R4,R8,R2,R15,R3,R6,R1,R6,R5,R3,R2,R4,R1,R2,R5,R1,R4,R3,R6,R8,R4,R3,R1,R5,R6,R2"

# Split rooms from 'Hotel_Rooms'
_, rooms = s.split(':')

# Group rooms into dictionary
room_dict = defaultdict(list)
for room in rooms.strip().split(','):
    room_dict[room].append(room)

print(list(room_dict.values()))
# [['R15', 'R15'], ['R11'], ['R5', 'R5', 'R5', 'R5'], ['R4', 'R4', 'R4', 'R4'], ['R8', 'R8'], ['R2', 'R2', 'R2', 'R2'], ['R3', 'R3', 'R3', 'R3'], ['R6', 'R6', 'R6', 'R6'], ['R1', 'R1', 'R1', 'R1']]

尝试使用collections.Counter,如下所示:

from collections import Counter
text= "Hotel_Rooms: R15,R11,R5,R4,R8,R2,R15,R3,R6,R1,R6,R5,R3,R2,R4,R1,R2,R5,R1,R4,R3,R6,R8,R4,R3,R1,R5,R6,R2"
C = Counter(text.split('Hotel_Rooms: ')[1].split(','))
print [[k,]*v for k,v in C.items()]

您还可以执行groupby

from itertools import groupby

string = "Hotel_Rooms: R15,R11,R5,R4,R8,R2,R15,R3,R6,R1,R6,R5,R3,R2,R4,R1,R2,R5,R1,R4,R3,R6,R8,R4,R3,R1,R5,R6,R2"

# convert string to sorted list
vals = sorted([x.strip() for x in string.split(':')[1].split(',')])

print([list(g) for k,g in groupby(vals)])

[['R1', 'R1', 'R1', 'R1'], ['R11'], ['R15', 'R15'], ['R2', 'R2', 'R2', 'R2'], ['R3', 'R3', 'R3', 'R3'], ['R4', 'R4', 'R4', 'R4'], ['R5', 'R5', 'R5', 'R5'], ['R6', 'R6', 'R6', 'R6'], ['R8', 'R8']]

相关问题 更多 >