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

Python 如何对一组字符串的元素进行分组,python,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 !=',': l

我有一个字符串,比如:

"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
但结果太奇怪了。你能告诉我如何改进代码吗

感谢您尝试使用,如下所示:

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()]
尝试使用,如下所示:

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()]

您的代码目前只是迭代输入字符串,并将逗号与其他字符分隔到不同的列表中。我认为这不是你想要的。看起来你想把相似的房间分组。为此,您可以使用一个:

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

您的代码目前只是迭代输入字符串,并将逗号与其他字符分隔到不同的列表中。我认为这不是你想要的。看起来你想把相似的房间分组。为此,您可以使用一个:

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']]
您还可以执行groupby:

您还可以执行groupby: