2013-03-26 3 views
0

파이썬 코드를 자바로 포팅하려고합니다. 필자는 파이썬에 익숙하지 않으며 이전에이 언어를 본 적이 없습니다.파이썬 배열 조합

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 

연습은 파이썬에서 튜플를 만들 수 온다; 한 요소 튜플 쉼표 필요

>>> (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

가 귀하의 질문에 모두 대답 할 수 있었다면 유일한 시간이 차이를 만드는, 라인이 두 목록을 연결, 둘 중 첫 번째는 이후 하나의 요소 목록입니다 쉼표는 그냥 파이썬에 의해 무시됩니다

1

나는 그것이 올바른지, 그것은 두 개의 "배열"(파이썬의 목록)을 결합합니다 믿습니다. 내가 잘못 본 것이 아니라면이 경우 쉼표는 필요하지 않습니다.

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

#is equivalent to 

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

이유 파이썬

는 목록에 쉼표를 후행의 사용이 튜플 용이성 코드에서 멀티 라인 목록 선언과 함께 사용의라는 또 다른 데이터 유형과 관련이있다 할 수 있습니다.

Why does Python allow a trailing comma in list?