2.3 리스트 #Writing Idiomatic Python 3.1

oen·2022년 3월 4일
0

1. list comprehension 사용해서 리스트 변형

list comprehension을 사용하면 기존 리스트의 각 원소를 돌면서 조건을 체크하고 변형해서 다시 저장할때 코드의 가독성을 높여주고,
cPython 인터플리터가 최적화를 해줘서 성능상의 이점도 있다고 한다.

👎

some_other_list = range(10)
some_list = list()

for element in some_other_list:
	if element % 10 == 0:
    	some_list.append(element + 5)
        
print(some_list)
[5]

👍

some_other_list = range(10)

some_list = [element + 5 for element in some_other_list if element % 10 == 0]

print(some_list)
[5]

2. 음수 인덱스 사용

음수 인덱스를 사용하면 목록의 끝에서부터 거꾸로 센 지점부터 시작한다

👎

word = 'abcde'
word_length = len(word)
print(word[word_length - 2:])
de

👍

word = 'abcde'
print(word[-2:])
de

3. map, filter 함수 대신 list comprehension 사용

👎

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

odd_numbers = filter(lambda x: x % 2 == 1, l)

odd_numbers_times_two = map(lambda x: x * 2, odd_numbers)

print(list(odd_numbers_times_two))
[2, 6, 10, 14, 18]

👍

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

odd_numbers_times_two = [x * 2 for x in l if x % 2 == 1]

print(list(odd_numbers_times_two))
[2, 6, 10, 14, 18]

4. sum 함수 사용

👎

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = 0

for e in l:
	s += e
    
print(s)
55

👍

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = sum(l)

print(s)
55

5. all 사용

iterable의 모든 원소에 대해서 bool(원소) 값이 True이면, all 함수는 True를 리턴한다

👎

iterable = range(3)
print(all(iterable))  # bool(0) == False
False

👍

def not_contains_zero(iterable):
    for e in iterable:
        if bool(e) == False:
            return False

    return True


iterable = range(3)
print(not_contains_zero(iterable))
False

6. 리스트의 나머지를 나타내기 위해 * 연산자 사용

👎

l = ['a', 'b', 'c', 'd', 'e']

first, second, rest = l[0], l[1], l[2:]
print(rest)

first, middle, last = l[0], l[1:-1], l[-1]
print(middle)

# penultimate: 끝에서 두번째
head, penultimate, last = l[:-2], l[-2], l[-1]
print(head)
['c', 'd', 'e']
['b', 'c', 'd']
['a', 'b', 'c']

👍

l = ['a', 'b', 'c', 'd', 'e']

first, second, *rest = l
print(rest)

first, *middle, last = l
print(rest)

*head, penultimate, last = l
print(head)
['c', 'd', 'e']
['b', 'c', 'd']
['a', 'b', 'c']
profile
🐾

0개의 댓글