2013-03-01 72 views
1
def cross(A, B): 
    "Cross product of elements in A and elements in B." 
    return [a+b for a in A for b in B] 

digits = '123456789' 
rows  = 'ABCDEFGHI' 
cols  = digits 
squares = cross(rows, cols) 
unitlist = ([cross(rows, c) for c in cols] + 
      [cross(r, cols) for r in rows] + 
      [cross(rs, cs) for rs in ('ABC','DEF','GHI') for cs in ('123','456','789')]) 
units = dict((s, [u for u in unitlist if s in u]) 
      for s in squares) 
peers = dict((s, set(sum(units[s],[]))-set([s])) 
      for s in squares) 

有人請幫我理解(簡單來說)最後兩行是什麼意思?瞭解程序

回答

0
units = dict((s, [u for u in unitlist if s in u]) 
      for s in squares) 

相同

units = dict() 
for s in squares: 
    units[s] = [u for u in unitlist if s in u] 

甚至類似以下低效版本

units = dict() 
for s in squares: 
    units[s] = [] 
    for u in unitlist: 
     if s in u: 
      units[s].append(u) 
+0

謝謝,我得到的第一線,但關於第二個是什麼? – awsomeguy 2013-03-01 18:46:17

+0

@LewisC:閱讀關於Python [sets](http://docs.python.org/2/library/stdtypes.html#set)和內置和 – Abhijit 2013-03-01 18:48:35