Given a list of list, the task is to get only positive element from given list. Below are some ways to solve the above problem.
Method #1: Using Iteration
Python3
Input
=
[[
10
,
-
11
,
222
], [
42
,
-
222
,
-
412
,
99
,
-
87
]]
Output
=
[]
for
elem
in
Input
:
temp
=
[]
for
x
in
elem:
if
x>
0
:
temp.append(x)
Output.append(temp)
print
("Initial
List
is
:",
Input
)
print
("Modified
list
is
:", Output)
Output:
Initial List is : [[10, -11, 222], [42, -222, -412, 99, -87]] Modified list is : [[10, 222], [42, 99]]
Time complexity: O(n*m), where n is length of Input list and m is length of sub lists in Input list.
Auxiliary Space: O(k), where k is length of Output list.
Method #2: Using map and list Comprehension
Python3
Input
=
[[
10
,
-
11
,
222
], [
42
,
-
222
,
-
412
,
99
,
-
87
]]
temp
=
map
(
lambda
elem:
filter
(
lambda
a: a>
0
, elem),
Input
)
Output
=
[[a
for
a
in
elem
if
a>
0
]
for
elem
in
temp]
print
("Initial
List
is
:",
Input
)
print
("Modified
list
is
:", Output)
Output:
Initial List is : [[10, -11, 222], [42, -222, -412, 99, -87]] Modified list is : [[10, 222], [42, 99]]
Time complexity: O(n*n), where n is the length of the test_list. The map and list Comprehension takes O(n*n) time
Auxiliary Space: O(n), where n is the number of elements in the input list
Method #3: Using List Comprehension
Python3
Input
=
[[
10
,
-
11
,
222
], [
42
,
-
222
,
-
412
,
99
,
-
87
]]
Output
=
[ [b
for
b
in
a
if
b>
0
]
for
a
in
Input
]
print
("Initial
List
is
:",
Input
)
print
("Modified
list
is
:", Output)
Output:
Initial List is : [[10, -11, 222], [42, -222, -412, 99, -87]] Modified list is : [[10, 222], [42, 99]]
Method #4: Using map, lambda, filter Here is an example of how you can use the map() function, the filter() function, and a lambda function to extract the positive elements from each sublist in a list of lists:
The code first initializes a list test_list with two sublists, each containing a mix of positive and negative integers. Then, it uses the map() function, the filter() function, and a lambda function to extract the positive elements from each sublist.
The map() function applies the lambda function to each element in the list test_list, which is a sublist in this case. The lambda function, in turn, uses the filter() function to filter out all the elements in the sublist that are not greater than 0. This results in a list of sublists, where each sublist contains only the positive elements from the corresponding sublist in the original list. Finally, the list() function is used to convert the map object returned by map() into a list, which is stored in the variable result.
Python3
test_list
=
[[
10
,
-
11
,
222
], [
42
,
-
222
,
-
412
,
99
,
-
87
]]
result
=
list
(
map
(
lambda
x:
list
(
filter
(
lambda
y: y >
0
, x)), test_list))
print
(
"The list after filtering positive elements : "
+
str
(result))
Output
The list after filtering positive elements : [[10, 222], [42, 99]]
This approach has a time complexity of O(nm), where n is the number of sublists in the list and m is the number of elements in each sublist, because it requires one iteration over each element in each sublist. The space complexity is also O(nm), because a new list with size equal to the number of elements in the original list is created.
Method #5: Using Regular Expressions
In this approach, we use regular expressions to match positive integers in each sublist. The regular expression pattern bd+b matches one or more digits (d+) surrounded by word boundaries (b). This ensures that only whole numbers are matched, and not negative numbers with a minus sign.
Python3
import
re
Input
=
[[
10
,
-
11
,
222
], [
42
,
-
222
,
-
412
,
99
,
-
87
]]
pattern
=
r
'bd+b'
Output
=
[]
for
elem
in
Input
:
temp
=
[]
for
x
in
elem:
if
re.match(pattern,
str
(x)):
temp.append(
int
(x))
Output.append(temp)
print
(
"Initial List is :"
,
Input
)
print
(
"Modified list is :"
, Output)
Output
Initial List is : [[10, -11, 222], [42, -222, -412, 99, -87]] Modified list is : [[10, 222], [42, 99]]
Time complexity: O(n*m), where n is length of Input list and m is length of sub lists in Input list.
Auxiliary Space: O(k), where k is length of Output list.
Last Updated :
09 May, 2023
Like Article
Save Article
0 / 0 / 0 Регистрация: 19.09.2018 Сообщений: 29 |
|
1 |
|
Вычислить сумму и количество положительных элементов массива15.10.2018, 18:54. Показов 29561. Ответов 1
Вычислить сумму и количество положительных элементов массива X(n), где 1<=n<=100
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
15.10.2018, 18:54 |
Ответы с готовыми решениями: Найти сумму и количество положительных элементов массива, предшествующих первому нулевому элементу (C++ -> Python) Найти сумму и количество положительных элементов, расположенных между минимальным и максимальным элементами массива Определить количество отрицательных, произведение положительных и количество нулевых элементов массива В массиве вычислить сумму четных положительных элементов 1 |
ProgSad 8 / 5 / 7 Регистрация: 15.02.2018 Сообщений: 36 |
||||
16.10.2018, 14:34 |
2 |
|||
Сообщение было отмечено Kolyanus12 как решение Решение
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
16.10.2018, 14:34 |
2 |
29.12.2019Python, Программы Python
При заданном списке списка задача состоит в том, чтобы получить только положительный элемент из данного списка. Ниже приведены некоторые способы решения вышеуказанной проблемы.
Метод № 1: Использование итерации
Input
=
[[
10
,
-
11
,
222
], [
42
,
-
222
,
-
412
,
99
,
-
87
]]
Output
=
[]
for
elem
in
Input
:
temp
=
[]
for
x
in
elem:
if
x>
0
:
temp.append(x)
Output.append(temp)
print
(
"Initial List is :"
,
Input
)
print
(
"Modified list is :"
, Output)
Выход:
Initial List is : [[10, -11, 222], [42, -222, -412, 99, -87]] Modified list is : [[10, 222], [42, 99]]
Метод № 2: Использование карты и списка понимания
Input
=
[[
10
,
-
11
,
222
], [
42
,
-
222
,
-
412
,
99
,
-
87
]]
temp
=
map
(
lambda
elem:
filter
(
lambda
a: a>
0
, elem),
Input
)
Output
=
[[a
for
a
in
elem
if
a>
0
]
for
elem
in
temp]
print
(
"Initial List is :"
,
Input
)
print
(
"Modified list is :"
, Output)
Выход:
Initial List is : [[10, -11, 222], [42, -222, -412, 99, -87]] Modified list is : [[10, 222], [42, 99]]
Метод № 3: Использование списка понимания
Input
=
[[
10
,
-
11
,
222
], [
42
,
-
222
,
-
412
,
99
,
-
87
]]
Output
=
[ [b
for
b
in
a
if
b>
0
]
for
a
in
Input
]
print
(
"Initial List is :"
,
Input
)
print
(
"Modified list is :"
, Output)
Выход:
Initial List is : [[10, -11, 222], [42, -222, -412, 99, -87]] Modified list is : [[10, 222], [42, 99]]
Рекомендуемые посты:
- Python | Объединить список с общими элементами в списке списков
- Python | Сортировка списка списков с похожими элементами списка
- Python | Максимальная сумма элементов списка в списке списков
- Python | Найти общие элементы в списке списков
- Python | Преобразовать столбец в отдельные элементы списка списков
- Python | Программа для подсчета количества списков в списке списков
- Python | Проверьте, существует ли список в данном списке списков
- Python | Способы суммирования списка списков и возврата списка сумм
- Python | Преобразовать список списков в список строк
- Python | Переставьте положительные и отрицательные элементы
- Программа Python для печати положительных чисел в списке
- Python | Конвертировать список в список списков
- Программа Python для подсчета положительных и отрицательных чисел в списке
- Python | Подсчет изменения знака в списке, содержащем положительные и отрицательные целые числа
- Python | Разделить список на списки по определенному значению
Python | Получить положительные элементы из данного списка списков
0.00 (0%) 0 votes
x = [-3, -5, 4, 2, -2, -6, 5]
for i in x:
if x[i] > 0:
print(x[i])
Не могу понять что не правильно и почему выводит результат:
Если x = [-3, -5, 3, 4, 2, -2, -6, 5].
Тогда выводит:
Как сделать чтобы в первом случае вывело только 4, а во втором 3
strawdog
23.4k4 золотых знака19 серебряных знаков33 бронзовых знака
задан 2 дек 2020 в 19:30
Варианты @Zhihar, @NykSu проходят весь список, а достаточно получить только один первый элемент из генератора:
print(next(filter(lambda i: i > 0, x)))
ответ дан 2 дек 2020 в 20:41
erieri
31.6k3 золотых знака26 серебряных знаков56 бронзовых знаков
а попробуйте так:
x = [-3, -5, 4, 2, -2, -6, 5]
print(list(filter(lambda i: i > 0, x))[0])
ответ дан 2 дек 2020 в 19:52
ZhiharZhihar
36.8k4 золотых знака25 серебряных знаков66 бронзовых знаков
2
x = [-3, -5, 4, 2, -2, -6, 5]
for i in x:
if i > 0:
print(i)
break # Прерывает цикл
i по сути и есть элемент x, а не его индекс. В первой итерации у Вас получается x[-3], во второй x[-5] и тд…
Дублирование из за того что x[-5] это 4, и x[2] тоже указывает на 4.
ответ дан 2 дек 2020 в 19:37
KersKers
3,1562 золотых знака7 серебряных знаков16 бронзовых знаков
1
if условие:
#ваш код
break
Тогда программа выйдет из цикла и не будет проверять другие елементы
cauf
2,50412 серебряных знаков24 бронзовых знака
ответ дан 2 дек 2020 в 19:38
RomanRoman
211 бронзовый знак
1
Можно и такой код, как вариант:
lst = [-3, -5, 4, 2, -2, -6, 5]
print([x for x in lst if x > 0][0])
Хоть выше с циклом быстрее выполнится.
ответ дан 2 дек 2020 в 20:10
NykSuNykSu
3092 серебряных знака8 бронзовых знаков
Добавлю функционального изврата, раз уж все пишут разные варианты. )
from operator import lt
from functools import partial
lst = [-3, -5, 4, 2, -2, -6, 5]
print(next(filter(partial(lt, 0), lst)))
ответ дан 2 дек 2020 в 20:32
CrazyElfCrazyElf
65.4k5 золотых знаков19 серебряных знаков50 бронзовых знаков
Голосование за лучший ответ
Бабичев Рама
Мастер
(1082)
5 лет назад
допустим, что:
a = 1,2,3,4,5,6,7,8,9
тогда список положительных чисел:
[x for x in a if x%2==0]
Юрий Моисеев
Оракул
(83754)
5 лет назад
Если числа из списка А, то например так:
print(len([A[i] for i in range(len(A)) if A[i]>0]))
UltimatuM
Оракул
(72867)
5 лет назад
l = [1,2,3, -4, 5]
print(sum(1 for x in l if x >0))