2013-03-26 54 views
0

我想將一些Python代碼移植到Java。我不熟悉Python和以前從來沒有見過這種在任何語言:Python數組合並

return [c,] + s 

這究竟行是什麼意思?特別是[c,]部分。它是結合兩個數組還是其他? s是一個整數數組,c是一個整數。全部功能如下(來自維基百科:http://en.wikipedia.org/wiki/Ring_signature

def sign(self,m,z): 
    self.permut(m) 
    s,u = [None]*self.n,random.randint(0,self.q) 
    c = v = self.E(u) 
    for i in range(z+1,self.n)+range(z): 
     s[i] = random.randint(0,self.q) 
     v = self.E(v^self.g(s[i],self.k[i].e,self.k[i].n)) 
     if (i+1)%self.n == 0: c = v 
    s[z] = self.g(v^u,self.k[z].d,self.k[z].n) 
    return [c,] + s 

非常感謝!

回答

5

逗號是多餘的。它只是創造一個元素的列表:

>>> [1,] 
[1] 
>>> [1] == [1,] 
True 

實踐來自於使用Python創建元組;一個元素的元組需要一個逗號:

>>> (1) 
1 
>>> (1,) 
(1,) 
>>> (1) == (1,) 
False 

[c,] + s語句創建與c值作爲第一要素的新列表。

3

[c,][c]完全相同,即單項清單。

(見this answer爲什麼需要這句法)

1

對於一個列表,額外的逗號是多餘的,可以忽略。唯一的一次,它是否有差別,如果那是一個元組,而不是一個列表,以便

[c,] and [c] are the same but, 
(c,) and (c) are different. The former being a tuple and later just a parenthesis around an expression 
0

回答既您的問題,該線連接兩個列表,第一個兩個是因爲一個元素的列表逗號只是被python忽略

1

我相信你是對的,它是結合了兩個「數組」(Python中的列表)。如果我沒有弄錯,在這種情況下,尾隨的逗號是不必要的。

x = [1,2,3] 
y = [1] + x 

#is equivalent to 

x = [1,2,3] 
y = [1,] + x 

原因Python允許使用名單中的尾隨逗號與調用代碼中多行列表聲明中使用的元組和易於另一種數據類型的事情。

Why does Python allow a trailing comma in list?