Как удалить списки из списка - PullRequest
1 голос
/ 07 мая 2020

Я создал список, в котором я стремлюсь исключить только те списки, первое значение которых больше его второго значения.

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

#y = []

x = [[1, 4], [1, 6], [2, 5], [2, 7], [4, 8], [6, 5], [6, 7], [2, 6], [3, 7], [5, 8], [6, 4], [7, 5]]
for i in range(len(x)):
    if x[i][0] > x[i][1]:
        print(x[i])


#        y.append(x[i])

Есть ли оптимальный способ достичь этого?

Я хочу, чтобы при печати на экране вы получали следующее:

[[1, 4], [1, 6], [2, 5], [2, 7], [4, 8], [6, 7], [2, 6], [3, 7], [ 5, 8]]

С уважением,

Ответы [ 4 ]

4 голосов
/ 07 мая 2020

Это должно работать:

y = [[a,b] for a,b in x if a <= b]

Тестирование:

>>> x = [[1, 4], [1, 6], [2, 5], [2, 7], [4, 8], [6, 5], [6, 7], [2, 6], [3, 7], [5, 8], [6, 4], [7, 5]]
>>> y = [[a,b] for a,b in x if a < b]
>>> y
[[1, 4], [1, 6], [2, 5], [2, 7], [4, 8], [6, 7], [2, 6], [3, 7], [5, 8]]
>>> 
0 голосов
/ 07 мая 2020
>>> filtered = list(filter(lambda f: f[0] < f[1], x))
>>> print(filtered)

Это создаст новый список с желаемыми значениями, используя встроенную функцию filter(function, iterable).

0 голосов
/ 07 мая 2020

Создание нового списка:

[v for v in x if v[0] <= v[1]]

Или удаление на месте:

for i in range(len(x) - 1, -1, -1):  # need to start at the end
    if x[i][0] > x[i][1]:
        x.pop(i)
0 голосов
/ 07 мая 2020

Это изменяет исходный список:

for i, (a, b) in enumerate(x):
    if a > b:
        del x[i]
...