2012-11-05 177 views
2

所以我有這樣的:Python中,在列出的清單中第一個列表的第一個元素比較第二列表的第一個元素

a = [[4, 8], [5, 6, 9, 10], [13]] 

我想要得到的差值(減法):

4 - 5 = a[0][0] - a[1][0] 

4 - 6 = a[0][0] - a[1][1] 

4 - 9 = a[0][0] - a[1][2] 

4 - 10 = a[0][0] - a[1][3] 

,然後移動到8:

8 - 5 = a[0][1] - a[1][0] 

8 - 6 = a[0][1] - a[1][1] 

... 

等了所有的子列表

任何想法?

編輯:其他的比較應該是這樣的:

5 - 13 = a[1][0] - a[2][0] 

6 - 13 = a[1][1] - a[2][0] 

9 - 13 = a[1][2] - a[2][0] 

10 - 13 = a[1][3] - a[2][0] 

而且因爲這是倒數第二個清單,然後停止。

我正試圖實施Quine-McCluskey方法來最小化邏輯表達式。

+4

你可以對你的意思爲「爲所有子列表等等。」更精確?你想要每個5,6,9,10與13之間的差異嗎? – user711413

+1

13會發生什麼? –

回答

1

假設完成後a[0][1] - a[1][x]要繼續a[0][0] - a[2][0],然後最終也做a[1][0] - a[2][0]等:

result = [] 
for i, sub_x in enumerate(a[:-1]): 
    for sub_y in a[i+1:]: 
     for x in sub_x: 
      result.append([x - y for y in sub_y]) 

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

作爲一個列表理解:

[[x - y for y in sub_y] 
    for i, sub_x in enumerate(a[:-1]) for sub_y in a[i+1:] for x in sub_x] 
+0

非常感謝!這正是我需要的。對不起,我沒有詳細說明我想將第二個列表與第三個列表進行比較,很高興您得到了它! – Guerick

+0

列表理解的外部循環迭代與擴展片段中的[: - 1]上的外部循環不同的[i + 1:]。這是故意的嗎?這不會產生不同的結果嗎? – parity3

1

像這樣的東西你想要做什麼,

但我不知道你需要什麼進一步的迭代,因爲這個問題是含糊不清。你對13做什麼?

>>> from itertools import product 
>>> [i[0] - i[1] for i in product([4, 8], [5, 6, 9, 10])] 
[-1, -2, -5, -6, 3, 2, -1, -2] 
0

如果這是您要查找的內容,此代碼爲您提供表格中的每個元素與下一行中每個元素的區別:

output = [] 
for row_num in range(len(a)-1): 
    row_output = [] 
    output.append(row_output) 
    for elt_row in a[row_num]: 
    elt_output = [] 
    row_output.append(elt_output) 
    for elt_next_row in a[row_num + 1]: 
     elt_output.append(elt_row - elt_next_row) 
1
python 3.2 
    a=[[4, 8], [5, 6, 9, 10], [13]] 
    [[x-y for x in a[i]for y in a[i+1]]for i in range(len(a)-1)] 

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

    another way: 
    for i in range(len(a)-1): 
      for v in a[i]: 
       y.append(list(v-h for h in a[i+1])) 
相關問題