Хочу разбить список на два списка right_order [] и reverse_order [], сравнивая элементы в списке - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть result список, в котором есть оба упорядоченных элемента, таких как A, B и B, комбинация A или это могут быть 1,2 и 2,1 и т. Д., Если мы нашли какой-либо обратный комбис для A, B или 1,2 или 3211, 3222 или что-то еще, после чего обратный комбис должен храниться в target_list, а правильный упорядоченный комбис должен храниться в source_list.Кроме того, если мы не найдем никаких обратных комбинаций, добавьте это к source_list, но target_list должен содержать только обратные комбинации в source_list, если мы нашли.

Вот мой код, яполучая только A, B combis, вы можете сказать, как я могу сделать это динамически, как вместо A это может быть что угодно, а вместо B это может быть что угодно, что должно удовлетворять объясненному выше условию

result = [('A','B', 'IP1','GP1'), ('B', 'C', 'IP2','GP2'),('A', 'C', 'IP3','GP2'),('A','B', 'IP4','GP2'),('D', 'Z', 'IP5','GP2'),('B', 'A', 'IP6','GP2'), ('C','B','IP7','GP2'), ('C', 'A', 'IP8','GP2'),('C','B','IP9','GP2')]
a=[i for i,v in enumerate(result) if v[:2]==('B','A')]
Source_list,target_list=result[:a[0]],result[a[0]:]
print(Source_list)
print(target_list)

вывод:

[('A', 'B', 'IP1', 'GP1'), ('B', 'C', 'IP2', 'GP2 '), (' A ',' C ',' IP3 ',' GP2 '), (' A ',' B ',' IP4 ',' GP2 '), (' D ',' Z ','IP5 ',' GP2 ')][(«B», «A», «IP6», «GP2»), («C», «B», «IP7», «GP2»), («C», «A», «IP8»,«GP2»), («C», «B», «IP9», «GP2»)]

1 Ответ

0 голосов
/ 16 ноября 2018

Я не совсем понял, что ты, что, но ты мне скажешь ...

def kamoulox(results):
    source_list = []
    target_list = []
    combis = set((result[0], result[1]) for result in results if result[0] <= result[1])
    for combi in combis:
        i = 0
        while i < len(results):
            if results[i][0:2] == combi:
                source_list.append(results.pop(i))
            elif results[i][0:2] == combi[::-1]:
                target_list.append(results.pop(i))
            else:
                i += 1
    return source_list, target_list

results = [
    ('32891', '32822', 'EKRGMD92-vMME-01', '10.88.158.81'),
    ('32822', '32891', 'EKRGMD92-vMME-02', '10.88.159.113'),
    ('32822', '32891', 'HRSNNJAQ-vMME-01', '10.88.162.81'),
    ('32822', '32891', 'HRSNNJAQ-vMME-02', '10.88.163.113'),
    ('32822', '32781', 'EKRGMD92-vMME-02', '10.88.159.113'),
    ('32822', '32781', 'HRSNNJAQ-vMME-01', '10.88.162.81'),
    ('32822', '32781', 'HRSNNJAQ-vMME-02', '10.88.163.113'),
    ('33033', '32891', 'EKRGMD92-vMME-02', '10.88.159.113'),
    ('33033', '32891', 'HRSNNJAQ-vMME-01', '10.88.162.81'),
    ('33033', '32891', 'HRSNNJAQ-vMME-02', '10.88.163.113'),
    ('33033', '32822', 'EKRGMD92-vMME-01', '10.88.158.81'),
    ('33033', '32781', 'EKRGMD92-vMME-02', '10.88.159.113'),
    ('33033', '32781', 'HRSNNJAQ-vMME-01', '10.88.162.81'),
    ('33033', '32781', 'HRSNNJAQ-vMME-02', '10.88.163.113'),
    ('32781', '32891', 'KSCYMOEC-MME-03', '10.148.9.19'),
    ('32781', '32822', 'EKRGMD92-vMME-01', '10.88.158.81'),
    ('32781', '32822', 'KSCYMOEC-MME-03', '10.148.9.19'),
    ('32781', '33033', 'KSCYMOEC-MME-03', '10.148.9.19')
]
source_list, target_list = kamoulox(results)

# source_list contains good ordered items (with or without reversed equivalent)
# target_list contains wrong ordered items with at least one equivalent into source_list
# results now contains wrong ordered items without good ordered equivalent
...