#python #python-3.x #discord.py
#python #python-3.x #discord.py
Вопрос:
В моем списке разное количество элементов, могу ли я их объединить?
list1 = ['item1', 'item1', 'item2 x25', 'item3', 'item2 x5']
Я хочу объединить вывод list1
и desired_list
desired_list = ['item1 x2', 'item2 x30', 'item3']
Комментарии:
1. Вы что-нибудь пробовали?
2. @DaniMesejo кроме создания дерева операторов if для каждого возможного числа нет, я действительно не знаю, что еще попробовать
3. действительно ли этот счетчик является частью строки? почему бы вам не использовать какой-нибудь тип данных ключ-значение в качестве словаря, где вы могли бы использовать элементы в качестве ключей и количество элементов в качестве значения?
Ответ №1:
Я имею в виду, не похоже, что вы много пробовали, поэтому я просто попытаюсь направить вас в правильном направлении.
Вы можете использовать .split() в виде:
for i, item in enumerate(list1):
list1[i] = item.split()
Чтобы получить что-то похожее:
list1 = [['item1'], ['item1'], ['item2', 'x25'], ['item3'], ['item2', 'x30']]
Это говорит вам о том, что если у вас нет элемента во втором элементе списка, его количество равно 1, а для остальных вы можете найти количество после x. Вы можете сделать что-то подобное, чтобы изменить его снова.
for i, item in enumerate(list1):
if len(item) == 1:
item.append(1)
else:
list1[i][1] = item[1][1:]
и это превращает список в:
list1 = [['item1', 1], ['item1', 1], ['item2', '25'], ['item3', 1], ['item2', '5']]
Где у вас есть первый элемент каждого элемента, указывающий, какой элемент, а второй — его количество. Затем вы можете найти похожие элементы и объединить их качества с помощью чего-то вроде
items = {}
for item in list1:
if item[0] not in items.keys():
else:
items[item[0]] = int(item[1])
Затем list1 = list(items.items())
превращает его обратно в список, который предоставляет желаемый результат [(‘item1’, 2), (‘item2’, 30), (‘item3’, 1)] . Конечно, если вы хотите, чтобы это было в формате «item1 x2», вы можете сделать:
for i, item in enumerate(list1):
list1[i] = " x".join(list1)
Что превратило бы все это обратно в строки, и список выглядел бы так list1 = ["item1 x2", "item2 x30", "item3 x1"]