我正在尝试将一些Python代码移植到Java。我不熟悉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
非常感谢!
答案 0 :(得分:5)
逗号是多余的。它只是创建一个单元素列表:
>>> [1,]
[1]
>>> [1] == [1,]
True
这种做法来自于在Python中创建元组;单元素元组需要逗号:
>>> (1)
1
>>> (1,)
(1,)
>>> (1) == (1,)
False
[c,] + s
语句创建一个值为c
的新列表作为第一个元素。
答案 1 :(得分:3)
[c,]
与[c]
完全相同,即单项列表。
(请参阅this answer了解为何需要此语法)
答案 2 :(得分: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
答案 3 :(得分:0)
回答你的两个问题,该行连接两个列表,两个中的第一个是单元素列表,因为逗号只是被python忽略
答案 4 :(得分:0)
我相信你是对的,它结合了两个“数组”(python中的列表)。如果我没有弄错的话,在这种情况下不需要尾随逗号。
x = [1,2,3]
y = [1] + x
#is equivalent to
x = [1,2,3]
y = [1,] + x
Python允许在列表中使用尾随逗号的原因与另一种称为元组的数据类型有关,并且易于使用代码中的多行列表声明。