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]
음수 인덱스를 사용하면 목록의 끝에서부터 거꾸로 센 지점부터 시작한다
word = 'abcde'
word_length = len(word)
print(word[word_length - 2:])
de
word = 'abcde'
print(word[-2:])
de
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]
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
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
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']