2016-05-12 46 views
0

我希望任何人都可以通過以下方式幫助我。我有一個名爲「列表」的列表。我有一個名爲X. 現在我想檢查List中每行的第三列中的值是否小於(<)X或等於/大於X.如果值較小,我想在第6列添加0,如果等於/更大,則添加1。對於每個X,我都希望將答案添加到列表中的上面的列中。所以在這種情況下有4個X值。因此,應該將4列添加到列表中。我的下面的代碼可能表明我相當不成熟,我希望你能幫助我。先謝謝你。根據特定列中的值添加0或1

List = [(3,5,6,7,6),(3,5,3,2,6),(3,6,1,0,5)] 
X= [1,4,5,6] 


    for item in X: 
     for number in row[3] for row in List: 
      count = 0 
      if number < item: 
       List[5+count].append(0) 
       count += 1 
       return List 
      else: 
       List[5+count].append(1) 
       count += 1    
       return List 
     return List 
+0

我不知道我明白你想做什麼。結果被認爲是[[3,5,6,7,6,1,1,1,1],[3,5,3,2,6,1,0,0,0],[3 ,6,1,0,5,1,0,0,0]],那是正確的嗎? –

+0

讓我們一次解決您的問題。 '行中的數字[3]在列表中的行:'是無效的語法。您需要使用新的縮進級別嵌套另一個循環,類似於您使用'for in item in X:'和'in'進行的操作。 –

+0

是的,這確實是我想要的輸出。因此,List中每一行的第3列中的每個值都用X中的所有4個值進行檢查。 – AlmostGr

回答

1
List = [(3,5,6,7,6),(3,5,3,2,6),(3,6,1,0,5)] 
X= [1,4,5,6] 

scores = [] 
for item in List: 
    scores.append(tuple(map(lambda x: 0 if item[2] < x else 1, X))) 

result = [] 
for item, score in zip(List, scores): 
    result.append(item + score) 

print(result) 
# [(3, 5, 6, 7, 6, 1, 1, 1, 1), (3, 5, 3, 2, 6, 1, 0, 0, 0), (3, 6, 1, 0, 5, 1, 0, 0, 0)] 
+0

謝謝你的幫助 – AlmostGr

1
  1. 你壓痕關閉(你應該取消縮進開始一切與你的for聲明。

  2. 不能appendtuples(您List變量裏面實際上tuples) 。

  3. 既然你是不是在一個函數,return不會做任何事情。

  4. 由於指數從0開始,你應該使用row[2]的第三排。

  5. X中有更多的元素比List中的行數多。

這樣說,你也可以使用列表解析來實現這一點。這裏是一個班輪,做同樣的事情:

>>> List = [(3,5,6,7,6),(3,5,3,2,6),(3,6,1,0,5)] 
>>> X = [1,4,5,6] 
>>> print [tuple(list(t[0])+[0]) if t[0][2] < t[1] else tuple(list(t[0]) + [1]) for t in zip(List, X)] 

將打印

[(3, 5, 6, 7, 6, 1), (3, 5, 3, 2, 6, 0), (3, 6, 1, 0, 5, 0)] 
+0

感謝您提示您的提示Selcuk – AlmostGr

+1

這可以簡化爲'[a +(int(a [2]> = b),)對於a,b in zip(List,X)]'(甚至'int'都是嚴格的表達式)。 –

0

與塞爾丘克

[編輯#1同意:謝謝@Rawing,我輸入錯誤>如<]

這裏是AlmostGr版的簡化: -

List = [[3, 5, 6, 7, 6], [3, 5, 3, 2, 6], [3, 6, 1, 0, 5]] 
X = [1, 4, 5, 6] 

for num in X: 
    for item in List: 
     if num > item[2]: 
      item.append(0) 
     else: 
      item.append(1) 

它運行在X中的所有元素,併產生輸出:

[[3, 5, 6, 7, 6, 1, 1, 1, 1], [3, 5, 3, 2, 6, 1, 0, 0, 0], [3, 6, 1, 0, 5, 1, 0, 0, 0]] 
+0

謝謝mrunmoy! – AlmostGr

+1

@AlmostGr:你說你期望'[[3,5,6,7,6,1,1,1,1],[3,5,3,2,6,1,0,0,0], [3,6,1,0,5,1,0,0,0]]作爲輸出。你確定這段代碼是做你想做的嗎? –

+0

對不起,@AlmostGr,我在前面的代碼中輸入錯誤。現在編輯它。 – Mrunmoy

2

首先,你應該知道,tuples(括號封閉列表)是不可改變的,所以一旦他們被定義,你不能改變他們的任何事情。最好在您的案例中使用list(附於[])。

List = [[3,5,6,7,6],[3,5,3,2,6],[3,6,1,0,5]] 
X= [1,4,5,6] 

for item in X: # loop on elements of X 
    for subList in List: # loop on 'rows' in List 
     if subList[2] < item: # test if 3rd element is smaller than item in X 
      subList.append(0); # push 0 to the end of the row 
     else: 
      subList.append(1); # push 1 to the end of the row 
+0

在迭代中使用它時,修改列表或其內容實際上並不是一個好習慣。 –

1
List = [[3,5,6,7,6],[3,5,3,2,6],[3,6,1,0,5]] 
X= [1,4,5,6] 
elems = [row[3] for row in List] 
for i in range(len(elems)): 
    for x in X: 
    if elems[i] < x: 
     List[i].append(0) 
    else: 
     List[i].append(1) 
print List 

如果你不使用的功能不能使用的回報。

+0

謝謝,這似乎正在做我想做的事。還要感謝所有其他人,我真的很感謝提示和幫助。 – AlmostGr

0

return需要從一個函數中調用。它退出該功能,並將由return指定的值返回給該功能。 所以你不能在你的程序中使用它。

在列表中,每一行實際上被稱爲元組。元組沒有append函數,因此您不能使用它來添加到行的末尾。

另外,在一行中不能有兩個for循環。 (這不是問題,因爲我們只需要一個來實現你的輸出)

我修改了你的代碼,使它看起來很相似,所以它更容易理解。

List = [(3,5,6,7,6),(3,5,3,2,6),(3,6,1,0,5)] 
X= [1,4,5,6] 

for item in X: 
    n = 0 
    for row in list: 
     if row[3] < item: 
      list[n] = list[n] + (0,) 
     else: 
      list[n] = list[n] + (1,) 
     n = n+1 

print List 

您需要添加(0,)或(1,)以表明它是一個元組添加。 (否則Python會認爲你正在添加一個整數的元組)