갈루아의 반서재

Photo by Suzy Hazelwood from Pexels

1. Multiple Assignment

다수의 변수에 동일한 값을 줘야할 때, 종종 아래와 같이 변수 각각에 대해 값을 부여하는 것을 볼 수 있다. 

>>> a = 1
>>> b = 1
>>> c = 1
>>> print(a)
1
>>> print(b)
1
>>> print(c)
1

하지만 파이썬에서는 다음과 같이 한 번에 다수의 변수에 같은 값을 줄 수 있다.

>>> a = b = c = 7
>>> print(a)
7
>>> print(b)
7
>>> print(c)
7

이 경우 모든 변수에는 체인의 가장 오른쪽에 있는 7이라는 값이 할당된다. 다음과 같이 7 대신 변수로도 대신할 수 있다.

>>> val = 99
>>> a = b = c = val
>>> print (a,b,c)
99 99 99

2. Sequence Unpacking

파이썬에서는 리스트와 같은 시퀀스의 경우, 반복문이나 별도록 시퀀스 각각의 원소에 대한 인덱스를 사용하지 않고, 시퀀스의 원소 각각에 대해 다음과 같이 개별적인 값을 할당할 수 있다.

>>> mylist = [1,2,3]
>>> a, b, c = mylist
>>> print(a,b,c)
1 2 3

mylist 라는 리스트 내의 원소 각각에 대해 이에 대응하는 값이 할당되었음을 볼 수 있다. 다만, 좌측의 변수 갯수와 리스트내의 값의 갯수가 다른 경우 다음과 같이 ValueError: too many values to unpack 에러를 발생시킨다. 

>>> yourlist = [4,5,6]
>>> x,y = yourlist
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)

Variable swapping

임시변수 사용없이 변수값을 스와핑할 수 있는 방법이 있다.

>>> a,b = (1,2)
>>> a
1
>>> b
2
>>> a,b = b,a
>>> a
2
>>> b
1

b, a 는 튜플 (b,a) 와 동일하므로, 시퀀스를 언팩해서 a 와 b 에 값을 재할당할 수 있다. 우측의 튜플을 바꿈으로써 변수들에 다른 값들을 부여할 수 있다.

3. Extended Slicing

일반적으로 mylist[begin:end] 표기를 통해서 시퀀스의 슬라이스를 만들 수 있음을 이미 알고 있다. 여기서 더 나아가 step 크기를 정하는 3번째 인자를 사용할 수 있는 extended slicing 표기를 통해서도 서브시퀀스를 만들 수 있다. 확장된 슬라이스 구문의 형식은 다음과 같다.

mylist[begin:end:step]

여기서 step 인자는 양수일수도 음수일수도 있다. 양수값의 경우 begin 값부터 시작해서 step 값만큼 건너뛰면서 end 값까지가는 것이고, step 이 음수값인 경우에는 end 값부터 시작해서 begin 값까지 step 값만큼씩 건너뛰면서 서브시퀀스를 만들게 된다. 

Reversing a list

리스트를 반전시키기 위해 확장된 슬라이스 구문을 사용할 수 있다.

>>> mylist = [1,2,3]
>>> reversedlist = mylist[::-1]
>>> reversedlist
[3, 2, 1]

step의 크기를 -1 로 설정함으로써, mylist 의 마지막부터 앞으로 한 번에 하나씩 시작점에 도달할 때까지 역으로 움직인다. 이를 통해 원래 리스트를 반전시킨 리스트를 만들 수 있다.

4. All and any

파이썬은 반복가능한 객체 내의 모든 원소 또는 원소 일부가 True 인지를 파악하는 2개의 독특한 내장 함수를 가지고 있는데, all 과 any 가 그것이다.

'python' 문자열은 빈 문자열이 아니므로 bool 연산의 결과로 불 자료형인 True를 돌려준다.

>>> all_true = [True, True, 1, 'hello']
>>> any_true = [0, False, True, '', []]
>>>
>>> all(all_true)
True
>>> any(all_true)
True
>>> all(any_true)
False
>>> any(any_true)
True
>>>
>>>
>>>
>>>

파이썬에서는 문자열, 숫자, 그리고 리스트의 경우 불린값은 다음과 같이 다르게 취급된다. 아래를 보자. 정수의 경우 0이 아니면 True 이고, 문자열이나 리스트의 경우 비어있지 않으면 True 이다. 

>>> bool(1)
True
>>> bool(0)
False
>>> bool([])
False
>>> bool(['1','2'])
True
>>> bool('')
False
>>> bool('python')
True

 

원문출처 https://medium.com/better-programming/4-uncommon-python-tricks-you-should-learn-2d3a156c10f2