2013-03-26 56 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?