如何在列表中的正数之后打印第一个负数?
How can I print first negative number after a positive number in a list?
我想在 python 列表中打印正数后的第一个负数。但是我做不到
lst = [2,4,-4,-5,-7,2,3,5,6,-9,-4,-6,3,45,6,-67,-45,-56]
在这个列表中我只想打印-4,-9,-67
你可以这样做:
for c, item in enumerate(lst): # go through all of the items and their indexs
if item < 0 and c > 0 and lst[c - 1] >= 0: # check if the previous item is positive and the current number is negative
print(item) # print the current item
尝试:
lst = [2, 4, -4, -5, -7, 2, 3, 5, 6, -9, -4, -6, 3, 45, 6, -67, -45, -56]
out = [b for a, b in zip(lst, lst[1:]) if a > 0 and b < 0]
print(out)
打印:
[-4, -9, -67]
稍微修改一下@Andrej Kesely 的答案,无需生成切片列表(通过使用索引代替),您可以获得相同的结果
out = [lst[i + 1] for i in range(len(lst) - 1) if lst[i] > 0 and lst[i + 1] < 0]
# [-4, -9, -67]
使用 Python 3.10+:
from itertools import pairwise
for a, b in pairwise(lst):
if a > 0 > b:
print(b)
没有:
a = 0
for b in lst:
if a > 0 > b:
print(b)
a = b
注意:您尚未指定列表中 0
的正确方法,这可能会稍微改变答案。
最干净的方法可能是:
[b for a,b in zip(lst, lst[1:]) if a > 0 > b]
(但对于大列表效率不是很高,因为它会复制列表)
一个更有效的方法可能是:
[lst[i] for i in range(1, len(lst)) if lst[i - 1] > 0 > lst[i]]
(但不够优雅)
如果您还需要更高的内存效率,您总是可以使用迭代器 (...)
而不是列表理解 [...]
。
我想在 python 列表中打印正数后的第一个负数。但是我做不到
lst = [2,4,-4,-5,-7,2,3,5,6,-9,-4,-6,3,45,6,-67,-45,-56]
在这个列表中我只想打印-4,-9,-67
你可以这样做:
for c, item in enumerate(lst): # go through all of the items and their indexs
if item < 0 and c > 0 and lst[c - 1] >= 0: # check if the previous item is positive and the current number is negative
print(item) # print the current item
尝试:
lst = [2, 4, -4, -5, -7, 2, 3, 5, 6, -9, -4, -6, 3, 45, 6, -67, -45, -56]
out = [b for a, b in zip(lst, lst[1:]) if a > 0 and b < 0]
print(out)
打印:
[-4, -9, -67]
稍微修改一下@Andrej Kesely 的答案,无需生成切片列表(通过使用索引代替),您可以获得相同的结果
out = [lst[i + 1] for i in range(len(lst) - 1) if lst[i] > 0 and lst[i + 1] < 0]
# [-4, -9, -67]
使用 Python 3.10+:
from itertools import pairwise
for a, b in pairwise(lst):
if a > 0 > b:
print(b)
没有:
a = 0
for b in lst:
if a > 0 > b:
print(b)
a = b
注意:您尚未指定列表中 0
的正确方法,这可能会稍微改变答案。
最干净的方法可能是:
[b for a,b in zip(lst, lst[1:]) if a > 0 > b]
(但对于大列表效率不是很高,因为它会复制列表)
一个更有效的方法可能是:
[lst[i] for i in range(1, len(lst)) if lst[i - 1] > 0 > lst[i]]
(但不够优雅)
如果您还需要更高的内存效率,您总是可以使用迭代器 (...)
而不是列表理解 [...]
。