Вложенный для l oop in python, который запускает второй l oop на итераторе первого цикла - PullRequest
1 голос
/ 26 марта 2020

Мне нужно, чтобы второй python l oop начинался следующим, где итератор первого l oop находится при входе во второй l oop

В настоящее время оба цикла запускают весь диапазон

К сожалению, я не понимаю этот синтаксис

Полный код в примере здесь: https://gist.github.com/kylemcdonald/c8e62ef8cb9515d64df4

for i, (start1, stop1) in enumerate(zip(starts, stops)):
    audio1 = y[start1:stop1]

    for j, (start2, stop2) in enumerate(zip(starts, stops)):
        audio2 = y[start2:stop2]

Я пытался меняется на

for i, (start1, stop1) in enumerate(zip(starts, stops)):
    audio1 = y[start1:stop1]

    for j, (start2, stop2) in enumerate(zip(start1, stops)):
        audio2 = y[start2:stop2]

Но я получаю ошибку: zip argument #1 must support iteration

Я также попробовал очевидный способ, которым это будет сделано в C

for i, (start1, stop1) in enumerate(zip(starts, stops)):
    audio1 = y[start1:stop1]

    for j = i+1, (start2, stop2) in enumerate(zip(start1, stops)):
        audio2 = y[start2:stop2]

Но я получаю сообщение об ошибке: SyntaxError: invalid syntax

Я не программист python, пожалуйста, помогите мне понять и исправить этот сложный синтаксис, чтобы loop2 начинался с итератора, следующего за текущим итератором l oop 1, и продолжался до конца l oop

Таким образом, нет повторных сравнений, и никакие 2 одинаковых аудиосэмпла не сравниваются друг с другом

Спасибо,

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Это может быть то, что вы хотите:

for i, (start1, stop1) in enumerate(zip(starts, stops)):
    audio1 = y[start1:stop1]

    for start2, stop2 in zip(starts[i+1:], stops[i+1:]):
        audio2 = y[start2:stop2]

, который перебирает пуски / остановки из текущего значения i. Я удалил второе перечисление, так как для вашего вопроса вам не нужно создавать индексы.

0 голосов
/ 26 марта 2020

Вот пример кода:

a = [1,2,3,4,5]
b = [10,20,30,40,50]

for i, (a1, b1) in enumerate(zip(a, b)):
    for j, (a2, b2) in enumerate(zip(a[i+1:],b[i+1:])):
        print(a1,b1,a2,b2)

Результат:

1 10 2 20
1 10 3 30
1 10 4 40
1 10 5 50
2 20 3 30
2 20 4 40
2 20 5 50
3 30 4 40
3 30 5 50
4 40 5 50
...