2016-03-15 45 views
0

我想創建一個函數,該函數返回奇數位置或列表的否定元素的列表元素。具有雙重條件的Python函數

我的解決方案使用第一個斷言,但第二個生成一個AssertionError,因爲返回[-1,-2,1]而不是[-1,-2]。有什麼建議麼?

def solution(input): 
    output = [] 
    for item in input: 
    if item < 0: 
     output.append(item) 
    elif not item % 2 == 0: 
     output.append(item) 
    return output 

assert solution([0,1,2,3,4,5]) == [1,3,5] 
assert solution([1,-1,2,-2]) == [-1,-2] 
+0

爲什麼會不會是'[-1,-2,1]'? 1是奇數... –

+0

@JoranBeasley假設得到的數字是奇數位還是負數,所以'[-1,-2,1]'是不正確的 – DaveBensonPhillips

回答

5

你想在奇數位置的數字,但你%檢查,檢查列表中的實際值,而不是他們的立場。

嘗試使用enumerate你遍歷列表靠上的價值指數:

def solution(input): 
    output = [] 
    for ix, item in enumerate(input): 
    if item < 0 or ix % 2 != 0: 
     output.append(item) 
    return output 
0

而且爲了完整性目的,你可能需要考慮增加給你的現有代碼:

if any(i < 0 for i in output): 
      return [i for i in output if i < 0] 

,因爲它測試一個否定是否存在,並且只有這樣才返回。然而,從我的角度來看,HumphreyTriscuit的答案是更好的解決方案。

0

一號線來定義解決方案的功能:

def solution(input): 
    return [input[pos] for pos in range(len(input)) if not pos %2 == 0 or input[pos] < 0] 

print solution([0,1,2,3,4,5,7]) 
print solution([1,-1,2,-2, -3])