Я не могу найти повторяющийся элемент во вложенном списке в python. Если у кого есть лучшее решение? - PullRequest
0 голосов
/ 17 апреля 2020

первые три строки списка списков (показаны ниже), затем «Альфа-Ромеро» имеет 2 типа «конвертируемых», а «Альфа-Ромеро» имеет один «хэтчбек».

У меня есть этот вложенный list, в качестве входных данных

cars = [['alfa-romero', 'convertible'],
['alfa-romero', 'convertible'],
['alfa-romero', 'hatchback'],
['audi', 'sedan'],
['audi', 'sedan'],
['audi', 'sedan'],
['audi', 'sedan'],
['audi', 'wagon'],
['audi', 'sedan']]

Итак, ваши выходные данные должны быть списком списков, как этот вывод будет таким

[‘alfa-romero --- convertible’, 2]
[‘alfa-romero --- hatchback’, 1]
[‘audi --- sedan’,4]

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Вы собираетесь сгенерировать и добавить списки в список вывода.

Во-первых, хотя ваши списки ввода недействительны в их текущей форме ... Я собираюсь предположить, что мы начиная с этого ввода:

cars = [['alfa-romero --- convertible', 2],
    ['alfa-romero --- hatchback', 1],
    ['audi --- sedan',4]]

Если нет, мы можем решить эту проблему отдельно, но ваши строки не являются допустимыми строками, потому что это не одинарные кавычки, а ваш список списков не является сам по себе список.

первый шаг - разделить строки на две отдельные строки. затем вы хотите добавить эти две строки в виде списка к вашему выходному списку определенное количество раз.

output_list = []
for row in cars:
    make, style = row[0].split(' --- ')
    for n in range(row[1]):
        output_list.append([make, style])

print(output_list)

В качестве альтернативы, вы можете выполнить sh это в более компактном виде, например:

    for row in cars:
        for n in range(row[1]):
            output_list.append(row[0].split(' --- '))
0 голосов
/ 17 апреля 2020

Я бы посоветовал использовать словарь. Указанный выбранный вывод не является наиболее подходящим способом отображения данных. Один из способов отфильтровать список:

cars = [['alfa-romero', 'convertible'],
['alfa-romero', 'convertible'],
['alfa-romero', 'hatchback'],
['audi', 'sedan'],
['audi', 'sedan'],
['audi', 'sedan'],
['audi', 'sedan'],
['audi', 'wagon'],
['audi', 'sedan']]

cars_dict = {}
for car in cars: # loop through each car
    if not(car[0] in list(cars_dict.keys())): # if the make has not occurred before make dictionary
        cars_dict[car[0]] = {}
        cars_dict[car[0]][car[1]] = 1
    else:
        if car[1] in list(cars_dict[car[0]].keys()):
            cars_dict[car[0]][car[1]] += 1
        else: 
            cars_dict[car[0]][car[1]] = 1 #if the type has not occurred before than make dictionary
print(cars_dict)

, который выдает:

{'alfa-romero': {'convertible': 2, 'hatchback': 1}, 'audi': {'sedan': 5, 'wagon': 1}}

ie словарь словарей. Доступ к car_dict [производитель] [тип]. Ключи первого словаря - это марка автомобиля, а ключи второго - тип автомобиля.

Если вывод требуется в указанном вами формате, вы можете использовать следующее для преобразования cars_dict словарь в список обязательных выходов:

required_output = []
for maker in cars_dict.keys():
    for type_of_car in cars_dict[maker].keys():
        required_output.append([str(maker) + " --- " + str(type_of_car), cars_dict[maker][type_of_car]])
print(required_output)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...