Range
reverse
a = [1, 23, 5, 6, 7]
for i in range(len(a), -1, -1) :
print(i)
step
for i in range(0, 20, 2) :
print(i)
# 0 2 4 6 ~ 20
test = [4, 3, 5, 11, 5]
for i in range(20, 0, -2) :
print(i)
# 20 18 16 14 ... 2
다만, 아래와 같은 경우에는 루프를 (당연히) 안돈다
for i in range(10, 20, -2):
print(i)
Array to String
list1 = ['a', 'b', 'c']
str1 = ''.join(list1)
근데, 숫자는 안의 내용물을 문자로 바꿔주고 join해야한다
list1 = [1, 2, 3]
str1 = ''.join([str(e) for e in list1])
띄어 쓰기를 중간에 넣어주려면
list1 = [1, 2, 3]
str1 = ' '.join([str(e) for e in list1])
Enumerate
index와 value를 한꺼번에 얻고 싶을때 사용하면 좋을것같다
t = [1, 5, 7, 33, 39, 52]
for p in enumerate(t):
print(p)
(0, 1)
(1, 5)
(2, 7)
(3, 33)
(4, 39)
(5, 52)
연산(=만들기)
곱하기로 여러개 만든다
a = ['Hi'] * 5
print(a) # ['Hi', 'Hi', 'Hi', 'Hi', 'Hi']
a = [[]] * 3
print(a) # [[], [], []]
더하기로 붙인다
a = [1, 2, 3]
b = [4, 5, 6]
c = a + b
print(c) # [1, 2, 3, 4, 5, 6]
a = [1, 2, 3]
b = [4, 5, 6]
a += b
print(a) # [1, 2, 3, 4, 5, 6]
주의 : A += B 와 A = A + B는 다르게 작동할 수 있다
a = [[1]] * 3
a[1] = a[1] + [2]
print(a) # [[1], [1, 2], [1]]
b = [[1]] * 3
b[1] += [2]
print(b) # [[1, 2], [1, 2], [1, 2]]
x가 배열 안에 있는지 체크
if 12 in [1, 2, 3, 6, 12, 20]:
print("yes~")
else:
print("no~")
# yes~
자르기
i번째 요소 ~ 마지막까지
list = [1, 2, 3, 4, 5]
result = list[2:]
print(result) # 3, 4, 5
i번째 ~ j번째
list = [1, 2, 3, 4, 5]
result = list[1:3]
print(result) # 2, 3
정렬
내부적으로 정렬하기
a = [1, 3, 7, 5, 2]
a.sort()
print(a) # [1, 2, 3, 5, 7]
정렬된 값을 돌려받기
a = [1, 3, 7, 5, 2]
b = sorted(a)
print(b) # [1, 2, 3, 5, 7]
print(a) # [1, 3, 7, 5, 2]
추가적으로 sort()는 배열만 받지만, sorted()는 dic도 받는다.
a = sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
print(a)
다만, value는 고려하지 않고 key만 본다.
오름차순과 내림차순
기본적으로 정렬은 오름차순으로 이루어지지만, reverse=True를 추가하면 내림차순으로 정렬된다.
a = [1, 3, 7, 5, 2]
a.sort(reverse=True)
print(a) # [7, 5, 3, 2, 1]
b = [1, 3, 7, 5, 2]
c = sorted(b, reverse=True)
print(c) # [7, 5, 3, 2, 1]
요소가 여러개인 배열을 정렬
a = [[150, 250, 4], [2, 5, 3], [99, 150, 0], [1, 100, 1], [100, 301, 2]]
a.sort()
print(a) # [[1, 100, 1], [2, 5, 3], [99, 150, 0], [100, 301, 2], [150, 250, 4]]
첫번째 원소를 기준으로 정렬한다
사전순으로 정렬
a = ['b', 'a', 'z', 'c', 'd']
a.sort()
print(a) # ['a', 'b', 'c', 'd', 'z']
key를 통한 커스텀 정렬
대소문자 구분 없애기
key 없이 정렬을 하면, 대문자가 소문자보다 더 낮기 때문에 앞에 오게 된다.
s = "This is a test string from Andrew"
a = sorted("This is a test string from Andrew".split())
print(a) # ['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']
key를 활용하면 원소들이 key에 들어있는 함수를 거쳐서 정렬된다. 아래의 예제에서도 split()해서 얻은 배열의 원소들이 str.lower함수를 거치면서 모두 소문자로 변환되고 정렬되기 때문에 문자열 ‘a’가 맨 앞에온다. 즉 대소문자를 구분 안하고 정렬이 된다
s = "This is a test string from Andrew"
a = sorted("This is a test string from Andrew".split(), key=str.lower)
print(a) # ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
내가 선택한 요소를 기준으로 정렬
students = [
('john', 'C', 15), # (이름, 성적, 나이)
('jane', 'A', 12),
('dave', 'B', 10),
]
# 나이순으로 정렬
by_age = sorted(students, key=lambda student: student[2])
print(by_age) # [('dave', 'B', 10), ('jane', 'A', 12), ('john', 'C', 15)]
# 등급순으로 정렬
by_grade = sorted(students, key=lambda el: el[1])
print(by_grade) # [('jane', 'A', 12), ('dave', 'B', 10), ('john', 'C', 15)]
key=lambda student: student[2]
이 부분은 key로 람다 함수를 쓴다는 의미고, 그 함수의 인자값으로 students의 원소를 (순서대로) 받는다. 이때 그 인자값의 변수 명을 student로 정해준거다. 그래야 함수의 body부분에서 원소에 접근(student[2]) 할 수 있다(당연한소리). 성적을 기준으로 정렬할때는 student 대신에 el을 썼다. 다시말해서 인자값에 이름은 아무렇게 정해도 상관 없다는 의미다.
물론 더 중요한거는 나이순으로 정렬하라는 의미에서 student[2]를 return했고, 등급순으로 정렬하라는 의미에서 el[1]을 return했다는 것이다.
이렇게 배열의 원소가 좀 복잡한 상황에서 정렬할때는 key인자가 매우 유용할것같다.
튜플 정렬 – 첫번째 원소는 내림차순, 두번째 원소는 오름차순
arr = [(4, 1), (10, 5), (4, -5), (4, -7), (8, 3), (1, 1)]
arr = sorted(arr, key = lambda x: (-1*x[0], x[1]))
print(arr) # [(10, 5), (8, 3), (4, -7), (4, -5), (4, 1), (1, 1)]
여러가지 built-in methods
append()
원소를 끝에 추가한다
list.append(element)
insert()
특정 위치에 요소를 추가한다
list = [1, 2, 3, 4, 5]
list.insert(2, 100)
print(list # [1, 2, 100, 3, 4, 5]
sum()
배열 안에있는 모든 원소들의 합을 구한다
sum([1, 2, 3])
Count()
배열안에 특정 값이 몇개있는지 센다
list = [1, 2, 3, 1, 2, 1, 2, 3, 2, 1]
print(list.count(1)) # 4
index()
특정 값이 배열의 몇번째(index)에 있는지 알아낸다
list = [1, 2, 3, 1, 2, 1, 2, 3, 2, 1]
print(list.index(2)) # 1 (2가 1번째에 있으니까!)
print(list.index(2, 3)) # 4 (3번째부터 시작해서 2를 찾는다)
print(list.index(1, 4, 7)) # 5 (4번째부터 7번째까지 1을 찾는다)
pop()
배열의 마지막 요소를 리턴하고 그 요소를 배열에서 제거한다.
list = [1, 2, 3]
a = list.pop()
print(a) # 3
print(list) # [1, 2]
del
list = [1, 2, 3]
del list[1]
print(list) # [1, 3]
remove()
맨 처음 발견한 요소를 삭제한다
list = [1, 2, 3, 4, 3, 3]
list.remove(3)
print(list) # [1, 2, 4, 3, 3]
기타 등등
배열 마지막 요소 선택
list = [1, 2, 3, 4, 5]
result = list[-1]
print(result) # 5
A = A[::-1]
test = [4, 3, 5, 11, 5]
for i in range(20, 0, -2) :
print(i)
# 20 18 16 14 ... 2
다만, 아래와 같은 경우에는 루프를 (당연히) 안돈다
for i in range(10, 20, -2):
print(i)
Array to String
list1 = ['a', 'b', 'c']
str1 = ''.join(list1)
근데, 숫자는 안의 내용물을 문자로 바꿔주고 join해야한다
list1 = [1, 2, 3]
str1 = ''.join([str(e) for e in list1])
띄어 쓰기를 중간에 넣어주려면
list1 = [1, 2, 3]
str1 = ' '.join([str(e) for e in list1])
Enumerate
index와 value를 한꺼번에 얻고 싶을때 사용하면 좋을것같다
t = [1, 5, 7, 33, 39, 52]
for p in enumerate(t):
print(p)
(0, 1)
(1, 5)
(2, 7)
(3, 33)
(4, 39)
(5, 52)
연산(=만들기)
곱하기로 여러개 만든다
a = ['Hi'] * 5
print(a) # ['Hi', 'Hi', 'Hi', 'Hi', 'Hi']
a = [[]] * 3
print(a) # [[], [], []]
더하기로 붙인다
a = [1, 2, 3]
b = [4, 5, 6]
c = a + b
print(c) # [1, 2, 3, 4, 5, 6]
a = [1, 2, 3]
b = [4, 5, 6]
a += b
print(a) # [1, 2, 3, 4, 5, 6]
주의 : A += B 와 A = A + B는 다르게 작동할 수 있다
a = [[1]] * 3
a[1] = a[1] + [2]
print(a) # [[1], [1, 2], [1]]
b = [[1]] * 3
b[1] += [2]
print(b) # [[1, 2], [1, 2], [1, 2]]
x가 배열 안에 있는지 체크
if 12 in [1, 2, 3, 6, 12, 20]:
print("yes~")
else:
print("no~")
# yes~
자르기
i번째 요소 ~ 마지막까지
list = [1, 2, 3, 4, 5]
result = list[2:]
print(result) # 3, 4, 5
i번째 ~ j번째
list = [1, 2, 3, 4, 5]
result = list[1:3]
print(result) # 2, 3
정렬
내부적으로 정렬하기
a = [1, 3, 7, 5, 2]
a.sort()
print(a) # [1, 2, 3, 5, 7]
정렬된 값을 돌려받기
a = [1, 3, 7, 5, 2]
b = sorted(a)
print(b) # [1, 2, 3, 5, 7]
print(a) # [1, 3, 7, 5, 2]
추가적으로 sort()는 배열만 받지만, sorted()는 dic도 받는다.
a = sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
print(a)
다만, value는 고려하지 않고 key만 본다.
오름차순과 내림차순
기본적으로 정렬은 오름차순으로 이루어지지만, reverse=True를 추가하면 내림차순으로 정렬된다.
a = [1, 3, 7, 5, 2]
a.sort(reverse=True)
print(a) # [7, 5, 3, 2, 1]
b = [1, 3, 7, 5, 2]
c = sorted(b, reverse=True)
print(c) # [7, 5, 3, 2, 1]
요소가 여러개인 배열을 정렬
a = [[150, 250, 4], [2, 5, 3], [99, 150, 0], [1, 100, 1], [100, 301, 2]]
a.sort()
print(a) # [[1, 100, 1], [2, 5, 3], [99, 150, 0], [100, 301, 2], [150, 250, 4]]
첫번째 원소를 기준으로 정렬한다
사전순으로 정렬
a = ['b', 'a', 'z', 'c', 'd']
a.sort()
print(a) # ['a', 'b', 'c', 'd', 'z']
key를 통한 커스텀 정렬
대소문자 구분 없애기
key 없이 정렬을 하면, 대문자가 소문자보다 더 낮기 때문에 앞에 오게 된다.
s = "This is a test string from Andrew"
a = sorted("This is a test string from Andrew".split())
print(a) # ['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']
key를 활용하면 원소들이 key에 들어있는 함수를 거쳐서 정렬된다. 아래의 예제에서도 split()해서 얻은 배열의 원소들이 str.lower함수를 거치면서 모두 소문자로 변환되고 정렬되기 때문에 문자열 ‘a’가 맨 앞에온다. 즉 대소문자를 구분 안하고 정렬이 된다
s = "This is a test string from Andrew"
a = sorted("This is a test string from Andrew".split(), key=str.lower)
print(a) # ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
내가 선택한 요소를 기준으로 정렬
students = [
('john', 'C', 15), # (이름, 성적, 나이)
('jane', 'A', 12),
('dave', 'B', 10),
]
# 나이순으로 정렬
by_age = sorted(students, key=lambda student: student[2])
print(by_age) # [('dave', 'B', 10), ('jane', 'A', 12), ('john', 'C', 15)]
# 등급순으로 정렬
by_grade = sorted(students, key=lambda el: el[1])
print(by_grade) # [('jane', 'A', 12), ('dave', 'B', 10), ('john', 'C', 15)]
key=lambda student: student[2]
이 부분은 key로 람다 함수를 쓴다는 의미고, 그 함수의 인자값으로 students의 원소를 (순서대로) 받는다. 이때 그 인자값의 변수 명을 student로 정해준거다. 그래야 함수의 body부분에서 원소에 접근(student[2]) 할 수 있다(당연한소리). 성적을 기준으로 정렬할때는 student 대신에 el을 썼다. 다시말해서 인자값에 이름은 아무렇게 정해도 상관 없다는 의미다.
물론 더 중요한거는 나이순으로 정렬하라는 의미에서 student[2]를 return했고, 등급순으로 정렬하라는 의미에서 el[1]을 return했다는 것이다.
이렇게 배열의 원소가 좀 복잡한 상황에서 정렬할때는 key인자가 매우 유용할것같다.
튜플 정렬 – 첫번째 원소는 내림차순, 두번째 원소는 오름차순
arr = [(4, 1), (10, 5), (4, -5), (4, -7), (8, 3), (1, 1)]
arr = sorted(arr, key = lambda x: (-1*x[0], x[1]))
print(arr) # [(10, 5), (8, 3), (4, -7), (4, -5), (4, 1), (1, 1)]
여러가지 built-in methods
append()
원소를 끝에 추가한다
list.append(element)
insert()
특정 위치에 요소를 추가한다
list = [1, 2, 3, 4, 5]
list.insert(2, 100)
print(list # [1, 2, 100, 3, 4, 5]
sum()
배열 안에있는 모든 원소들의 합을 구한다
sum([1, 2, 3])
Count()
배열안에 특정 값이 몇개있는지 센다
list = [1, 2, 3, 1, 2, 1, 2, 3, 2, 1]
print(list.count(1)) # 4
index()
특정 값이 배열의 몇번째(index)에 있는지 알아낸다
list = [1, 2, 3, 1, 2, 1, 2, 3, 2, 1]
print(list.index(2)) # 1 (2가 1번째에 있으니까!)
print(list.index(2, 3)) # 4 (3번째부터 시작해서 2를 찾는다)
print(list.index(1, 4, 7)) # 5 (4번째부터 7번째까지 1을 찾는다)
pop()
배열의 마지막 요소를 리턴하고 그 요소를 배열에서 제거한다.
list = [1, 2, 3]
a = list.pop()
print(a) # 3
print(list) # [1, 2]
del
list = [1, 2, 3]
del list[1]
print(list) # [1, 3]
remove()
맨 처음 발견한 요소를 삭제한다
list = [1, 2, 3, 4, 3, 3]
list.remove(3)
print(list) # [1, 2, 4, 3, 3]
기타 등등
배열 마지막 요소 선택
list = [1, 2, 3, 4, 5]
result = list[-1]
print(result) # 5
A = A[::-1]
list = [1, 2, 3, 4]
list = list[::-1]
print(list) # [4, 3, 2, 1]