Найти - Пользователи
Полная версия: Подскажите, как лучше всего сравнить данные двух циклов?
Начало » Python для новичков » Подскажите, как лучше всего сравнить данные двух циклов?
1
TitanFighter
Доброго времени суток.

Помогите советом.
Есть такой вот код:
for x in range(length):
    rus_name_x = list_w_dicts[x]['rus_name']
    original_name_x = list_w_dicts[x]['original_name']
    production_year_x = list_w_dicts[x]['production_year']
    director_x = list_w_dicts[x]['director']
    scenarist_x = list_w_dicts[x]['scenarist']
    actors_x = list_w_dicts[x]['actors']
    for y in range(x+1, length):
        rus_name_y = list_w_dicts[y]['rus_name']
        original_name_y = list_w_dicts[y]['original_name']
        production_year_y = list_w_dicts[y]['production_year']
        director_y = list_w_dicts[y]['director']
        scenarist_y = list_w_dicts[y]['scenarist']
        actors_y = list_w_dicts[y]['actors']

Некоторые значения в циклах “х” и “y” могут быть None.

Как лучше\оптимальней всего реализовать:
1) чтоб из циклов “х” и “у” вытянуть только те переменные, в которых есть значения\данные (т.е. not None)
2) потом эти переменные отфильтровать так, чтоб они присутствовали и в цикле “х” и в цикле “у”.
На примере:
- в цикле “х” данные (not None) имеют rus_name, production_year и actors
- в цикле “y” данные (not None) имеют rus_name, scenarist и actors,
соответственно нужно “вытянуть” из “х” и “у” - rus_name и actors
3) сравнить между собой значения этих переменных. Если значения между собой совпадают, сделать одно действие, если нет - сделать другое.
?

Спасибо.
ayb
Откройте для себя удивительный мир itertools
doza_and
TitanFighter
Как лучше\оптимальней всего реализовать
Так от цели зависит. Озвучте. Иначе будем считать что нужен код на разработку которого уйдет минимальное время.
TitanFighter
сравнить между собой значения этих переменных.
Вы что if не знаете как написать?
if (rus_name == actors) and (not rus_name is None):
    do_some()
else:
   do_other()
TitanFighter
ayb
Откройте для себя удивительный мир itertools
Спасибо. Потопал открывать.

doza_and
TitanFighter
Как лучше\оптимальней всего реализовать
Так от цели зависит. Озвучте. Иначе будем считать что нужен код на разработку которого уйдет минимальное время.
Перефразирую - подскажите пожалуйста, как лучше всего “в комплексе” решить все 3 пункта? Есть ли какое то подходящее для этого средство?

doza_and
Вы что if не знаете как написать?
if (rus_name == actors) and (not rus_name is None):
do_some()
else:
do_other()
Не… Ну это уже слишком) Ключевые слова тут другие: Как лучше\оптимальней Но это линейно (if имею ввиду).
py.user.next
А где словесное описание задачи?

1. Сначала делаешь словесное описание алгоритма.
2. Потом рисуешь блок-схему по словесному описанию.
3. Потом пишешь псевдокод по блок-схеме.
4. И только потом пишешь код по псевдокоду.

Всё это сначала проделываешь на бумаге, потом - в воображении. Иначе будешь для каждой задачи по 500 кодов писать - и все неправильные.
TitanFighter
doza_and
Вы что if не знаете как написать?
if (rus_name == actors) and (not rus_name is None):
do_some()
else:
do_other()
Прошу прощения. Вы почти были правы Все оказалось гораздо проще, чем я себе изначально представлял
list_w_dicts = [{'rus_name': 'Терминатор',
                 'original_name': 'Terminator',
                 'production_year': None,
                 'director': 'Кэмерон',
                 'actor': 'Schwarz111'},
                
                {'rus_name': 'Терминатор',
                 'original_name': None,
                 'production_year': 2015,
                 'director': 'Кэмерон',
                 'actor': 'Schwarz'}]
compare = []
length = len(list_w_dicts)
for x in range(length):
    for y in range(x+1, length):
        for k,v in list_w_dicts[x].items():
            # отобрали "общие" переменные
            if (v is not None) and list_w_dicts[y][k]:
                combine=(list_w_dicts[x][k], list_w_dicts[y][k])
                compare.append(combine)
print(compare) # [('Schwarz111', 'Schwarz'), ('Кэмерон', 'Кэмерон'), ('Терминатор', 'Терминатор')]
# сравниваем значения переменных
for item in compare:
    if all(x==item[0] for x in item):
        print('fantastish')
    else:
        print('bad')
        break
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB