Python:从度量列表中生成有效结果的列表

2024-09-30 22:12:10 发布

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

我在用python编写函数时遇到了一些问题。它是用一个整数列表(度量值)调用的,它需要检查每个整数的有效度量值(与下一个元素相比,增量为0.1)。它需要将它们存储在新的列表中,在相同的索引上使用true/false。你知道吗

def mark_veljavne(s):
b = []
a = 0
for f in s:
    if len(s) == 1:
        b.append(True)
        break
    if a == 0:
        if abs(s[0] - s[1]) > 0.1:
            b.append(True)
            a += 1
        else:
            b.append(False)
            a += 1
    if a == (len(s) - 1):
        if abs(s[a] - s[a - 1]) > 0.1:
            b.append(True)
            break
        else:
            b.append(False)
            break
    if abs(s[a] - s[a - 1]) > 0.1 and abs(s[a] - s[a + 1]) > 0.1 and a != 0:
        b.append(True)
        a += 1
    elif a != 0:
        b.append(False)
        a += 1
return b

Link to test in pastebin, since they get shown in one line

def test_oznaci_veljavne(self): self.assertEqual(oznaci_veljavne([5.18, 5.907, 6.632, 7.215]), [True] * 4) self.assertEqual(oznaci_veljavne([132.3, 132.94]), [True] * 2) self.assertEqual(oznaci_veljavne([183.12]), [True]) self.assertEqual(oznaci_veljavne([205.134, 205.182, 205.190, 205.207]), [False] * 4) self.assertEqual(oznaci_veljavne([308.412, 308.416]), [False] * 2) self.assertEqual(oznaci_veljavne([205.134, 205.182, 205.190, 205.207, 250.13, 250.83, 251.6, 308.412, 308.416]), [False] * 4 + [True] * 3 + [False] * 2) self.assertEqual(oznaci_veljavne([205.134, 205.182, 308.416]), [False] * 2 + [True]) self.assertEqual(oznaci_veljavne([205.134, 205.182, 308.416, 308.999]), [False] * 2 + [True] * 2) self.assertEqual(oznaci_veljavne([100, 100.8, 205.134, 205.182, 308.416, 308.999]), [True] * 2 + [False] * 2 + [True] * 2) self.assertEqual(oznaci_veljavne([100, 100.8, 205.134, 205.182]), [True] * 2 + [False] * 2) self.assertEqual(oznaci_veljavne([100, 205.134, 205.182, 205.190, 205.207, 250.13, 250.83, 251.6, 308.412, 308.416]), [True] + [False] * 4 + [True] * 3 + [False] * 2) self.assertEqual(oznaci_veljavne([100, 205.134, 205.182, 205.190, 205.207, 250.13, 250.83, 251.6, 308.412, 308.416, 500]), [True] + [False] * 4 + [True] * 3 + [False] * 2 + [True]) self.assertSequenceEqual(oznaci_veljavne([ 5.18, 5.907, 6.632, 7.215, 132.3, 132.94, 183.12, 205.134, 205.182, 205.190, 205.207, 308.412, 308.416, 512.73, 513.20, 513.65, 918.2, 918.73]), [True] * 4 + [True] * 2 + [True] + [False] * 4 + [False] * 2 + [True] * 3 + [True] * 2) 

Tags: inselffalsetrue列表if度量def
1条回答
网友
1楼 · 发布于 2024-09-30 22:12:10

您可以将列表理解表达式编写为:

[j-i<0.1 for i, j in zip(my_list[:-1], my_list[1:])]

这将创建新列表,其值为:

  • True如果两个连续元素之间的差值小于0.1
  • False如果差值大于或等于0.1

运行示例:

>>> my_list = [1.00, 1.02, 1.05, 1.3, 1.34, 1.51, 1.54]
>>> [j-i<0.1 for i, j in zip(my_list[:-1], my_list[1:])]
[True, True, False, True, False, True]

相关问题 更多 >