Можете ли вы взять несколько элементов в списке, объединить их и добавить «x (количество)» в конце?

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