Создайте новый список с оператором if в Python - PullRequest
0 голосов
/ 26 января 2019

у меня 4 списка

list01 = [2,5,4,9,10,-3,5,5,3,-8,0,2,3,8,8,-2,-4,0,6]
list02 = [-7,-3,8,-5,-5,-2,4,6,7,5,9,10,2,13,-12,-4,1,0,5]
list03 = [2,-5,6,7,-2,-3,0,3,0,2,8,7,9,2,0,-2,5,5,6]
biglist = list01 + list02 + list03

Как мне создать новый список с именем "newlist02", который содержит элементы "большого списка", которые больше 0?

Вот что я попробовал.

ct = 0
for xval in biglist:
    if 0 < xval:
        ct += 1  # Adds 1 to ct; same as ct = ct + 1
print(ct)        # print out the total number of elements that greater than 0. 


newlist02 = 36*[0]    # create a new list with 36 "0"s
for xval in biglist:
    if 0 < xval:
        newlist02[xval] = xval # Adds 1 to ct; same as ct = ct + 1
print(newlist02)

вывод, который я получил: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Как я могу содержать только те числа, которые больше 0?

1 Ответ

0 голосов
/ 29 января 2019

не смешивать значения и индексы.

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

list01 = [2,5,4,9,10,-3,5,5,3,-8,0,2,3,8,8,-2,-4,0,6]
list02 = [-7,-3,8,-5,-5,-2,4,6,7,5,9,10,2,13,-12,-4,1,0,5]
list03 = [2,-5,6,7,-2,-3,0,3,0,2,8,7,9,2,0,-2,5,5,6]
biglist = list01 + list02 + list03

newlist02 = [x for x in biglist if x>0]

результат:

[2, 5, 4, 9, 10, 5, 5, 3, 2, 3, 8, 8, 6, 8, 4, 6, 7, 5, 9, 10, 2, 13, 1, 5, 2, 6, 7, 3, 2, 8, 7, 9, 2, 5, 5, 6]

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

import itertools

newlist02 = [x for x in itertools.chain(list01,list02,list03) if x>0]

результат такой же, как и выше, но мы сохранили создание biglist, если оно нам не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...