2016-11-07 26 views
0

我在使用python編寫函數時遇到了一些問題。它被稱爲一個整數列表(測量),它需要檢查每一個有效的測量值(與下一個元素相比,增量爲0.1)。並且需要將它們存儲在新列表中,並在相同索引中使用true/false。Python:從測量列表中製作有效結果列表

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) 
+2

這將是巨大的,如果你可以提供樣品輸入列表和所需的輸出列表 –

+3

歡迎來到StackOverflow!如果您提供了迄今爲止已經嘗試的例子以及爲什麼這些嘗試未奏效,人們將能夠更好地幫助您。 –

回答

1

你可以寫一個列表理解表達爲:

[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] 
+0

然後你的答案將是'真'+答案結果由我給出的列表理解。因爲第一個值總是有效的,其餘的值依賴於前一個值。 –

+0

因爲我意外地刪除了我最後的評論:這個任務是關於測量在他的輪子上運行的倉鼠。輸入列表包含每次旋轉的測量秒數以及函數「驗證」每一個。所以如果他們比0.1秒更接近測量結果,如果是假的(不可能)。 – SyntaxError