Понимание списка Python и list.remove () - PullRequest
2 голосов
/ 17 ноября 2011

В списке signal_by_date хранятся кортежи, и каждый кортеж содержит 15 чисел.Для каждого кортежа в signal_by_date я хочу удалить числа, которые не удовлетворяют определенным критериям.По какой-то причине, независимо от того, какие ограничения я наложил на понимание списка, у меня всегда остается 7 номеров в каждом кортеже.В приведенном ниже примере кода все числа меньше 3, поэтому я ожидаю, что каждый кортеж будет пустым.Что я делаю неправильно?Большое спасибо.

    signals_by_date = []
    for i in range(0, 1):
        temp_signals = []
        for symbol in symbols:        
            for signal in signals_by_symbol[symbol]:
            temp_signals.append(signal[i]-1)
        signals_by_date.append(temp_signals)
        [signals_by_date[i].remove(v) for v in signals_by_date[i] if v < 3]

Ответы [ 2 ]

3 голосов
/ 17 ноября 2011

Последняя строка должна читаться:

signals_by_date[i] = [v for v in signals_by_date[i] if v >= 3]
1 голос
/ 17 ноября 2011

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

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

...