使用Python将值列表拆分为两个列表,当循环时出现负值时

2024-04-24 04:12:50 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个浮动列表。我想知道如何循环遍历列表,每当出现负值时,如何将列表拆分为两个单独的列表。你知道吗

初始值集: [0.1, 0.5, 3.2, 8.2, 0.0, 19.7, 0.0, -0.8, -12.0, -8.2, -2.5, -6.9, -1.3, 0.0英寸]

我想要的结果示例:

listA=[0.1,0.5,3.2,8.2,0.0,19.7,0.0]

列表B=[-0.8、-12.0、-8.2、-2.5、-6.9、-1.3、0.0]

这里的关键是列表的长度不同,第一个负值出现的位置也不同。你知道吗

简而言之:第一个负值出现的地方,分成两个单独的列表。你知道吗

有什么想法吗?任何帮助都将不胜感激。 -干杯


Tags: 示例列表地方关键英寸lista干杯负值
3条回答

这个想法很简单,在你的列表中循环,如果数字是正数,那么把它加到第一个列表中,如果数字是负数,那么把saw_negative = True转到第二个列表中。你知道吗

li = [0.1, 0.5, 3.2, 8.2, 0.0, 19.7, 0.0, -0.8, -12.0, -8.2, -2.5, -6.9, -1.3, 0.0]
first_li = []
second_li = []
saw_negative = False
for item in li:
    if item >= 0 and not saw_negative:
        first_li.append(item)
    elif item < 0 or saw_negative:
        saw_negative = True
        second_li.append(item)
print first_li
print second_li

输出:

[0.1, 0.5, 3.2, 8.2, 0.0, 19.7, 0.0]
[-0.8, -12.0, -8.2, -2.5, -6.9, -1.3, 0.0]

这是另一种方法,在数字为负数之前,将数字附加到第一个列表,每当数字为负数时,将列表的其余部分附加到第二个列表并中断循环

li = [0.1, 0.5, 3.2, 8.2, 0.0, 19.7, 0.0, -0.8, -12.0, -8.2, -2.5, -6.9, 
-1.3, 0.0]
first_li = []
second_li = []
for index, item in enumerate(li):
    if item < 0:
        second_li = li[index:]
        break
    first_li.append(item)
print first_li
print second_li

输出:

[0.1, 0.5, 3.2, 8.2, 0.0, 19.7, 0.0]
[-0.8, -12.0, -8.2, -2.5, -6.9, -1.3, 0.0]

也可以使用itertools标准库模块中的^{}^{}函数以函数式的方式完成:

from itertools import groupby, chain

def split_at_first_negative(lst):
    """Split the list at the first occurrence of a negative value.

    >>> split_at_first_negative([1, 2, 3, -1, -5, -3, 5, -6, 1])
    ([1, 2, 3], [-1, -5, -3, 5, -6, 1])
    """
    groups = groupby(lst, lambda x: x >= 0)
    first = list(next(groups)[1])
    second = list(chain.from_iterable(g[1] for g in groups))
    return first, second

首先,可以使用generator expression查找第一个负值的索引:

neg = next((i for i, v in enumerate(values) if v < 0), -1)

然后,对列表进行切片(假设neg != -1):

listA, listB = values[:neg], values[neg:]

相关问题 更多 >