Как мне прекратить итерацию в зависимости от количества элементов в моем списке? - PullRequest
3 голосов
/ 20 июня 2020

У меня есть проект, в котором я должен получить последующие элементы элементов в on_time.

Например:

j_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
s_follow_int = [[2, 3], 4, [5, 6], [6, 8], [7, 8], 9, 8, 10, 10, 11]
on_time = [4, 5]

Код, который у меня есть, выглядит так:

# element in on_time except 1, get follow_finish_act
follow_finish_act = []

for a, d in zip(j_set, s_follow_int):
    if a in on_time and a != 1:
        if len(on_time) > 1:
            follow_finish_act.append(d)
        else:
            follow_finish_act = d

Вывод, который я получаю:

follow_finish_act =  [[6, 8], [7, 8]]

Ожидаемый результат:

follow_finish_act = [6, 7, 8]

У меня проблемы, когда длина on_time больше 1. Я думаю проблема в том, чтобы сгладить неправильные списки (могут быть вложенными и целочисленными) без дубликатов. Поскольку я не могу получить ожидаемый результат.

Любая помощь / предложения приветствуются! Спасибо!

Изменить: код, который я использовал для сглаживания вывода follow_finish_act

def flatten(lss):
    for item in lss:
        try:
            yield from flatten(item)
        except TypeError:
            yield item

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Вы можете избежать дублирования, используя set вместо list

j_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
s_follow_int = [[2, 3], 4, [5, 6], [6, 8], [7, 8], 9, 8, 10, 10, 11]
on_time = [4, 5]

follow_finish_act = set()

for a, d in zip(j_set, s_follow_int):
    if a in on_time and a != 1:
        if len(on_time) > 1:
            follow_finish_act.update(d)
        else:
            follow_finish_act.update(d)

print(follow_finish_act)
# prints {6,7,8}
print(list(follow_finish_act))
# prints[8,7,6]
1 голос
/ 20 июня 2020

Трудно сказать, чего вы действительно хотите, но, глядя на код, многие из них кажутся излишними. Попробуйте вместо этого:

j_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
s_follow_int = [[2, 3], 4, [5, 6], 8, 7, 9, 8, 10, 10, 11]
on_time = [6, 5]

follow_finish_act = []
for a, d in zip(j_set, s_follow_int):
    if a in on_time:
        follow_finish_act.append(d)

print(follow_finish_act)

Вывод:

[7, 9]

Если вы затем получите результат, например: [9], вы можете сделать это позже:

if len(follow_finish_act) == 1:
    follow_finish_act = follow_finish_act[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...