【问题标题】:How to identify the first sign change in a sequence of list using python如何使用python识别列表序列中的第一个符号变化
【发布时间】:2018-10-01 17:54:52
【问题描述】:

我有以下列表 - python

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

我想在第一次遇到正面或负面时做出决定性陈述

Ex -6 , 6 和 -6 所有 3 个地方我想要决定声明

【问题讨论】:

  • 有点难以理解你在问什么。请添加您尝试过的内容,即使它不起作用。
  • 在任何给定的列表上,我都希望获得第一个符号更改。 Count=0 for number in numbers : if num
  • 你想去哪里?还是只是价值观? a[1:][np.diff(np.sign(a)) != 0] ... array([-6, 6, -6]) 其中a 是列表的数组版本

标签: python list numpy


【解决方案1】:

当标志改变时,听起来你想做点什么。我假设它是一个名为f 的函数。所以,概括地说,我们想要的代码看起来像(调用你的列表l):

for x in l:
    if (the sign changed at x):
        f()

符号变化是什么意思?好吧,l[i] > 0l[i-1] 0 时,您必须决定要做什么。因此,假设您编写了一个名为sign_change(x,y) 的函数,当xy 的符号不同时返回True,而当它们相同时返回False

请注意,这与上面的伪代码并不完全一致——我们需要同时访问当前元素和前一个元素。因此,与其迭代列表,不如迭代索引,从1,..., len(l)-1 开始。这给了我们:

for i in range(1, len(l) - 1):
    if sign_change(l[i], l[i-1]):
        f()

我们必须从 1 开始迭代,因为在 0 之前没有任何内容。 (事实上​​,l[-1] 会给我们列表的 last 元素。)

现在你只需要写fsign_change

【讨论】:

    【解决方案2】:

    这个检测符号变化并返回符号变化的数字:

    lst =[1,3,2,3,5,-6,-3,-4,-3,-5,6,7,8,9,-6,-4,-5,-8]
    print(' '.join([str(y) for x, y in zip(lst, lst[1:]) if (x ^ y) < 0]))
    # -6 6 -6
    

    如果你想改变符号的次数:

    lst =[1,3,2,3,5,-6,-3,-4,-3,-5,6,7,8,9,-6,-4,-5,-8]
    print(len([str(y) for x, y in zip(lst, lst[1:]) if (x ^ y) < 0]))
    # 3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 2018-01-22
      • 2021-11-23
      • 2019-04-02
      相关资源
      最近更新 更多