리스트 연습문제 거의 끝이다
# 앞뒤가 동일하면 True 아니면 False 출력
L = [1,2,3,2,1]
Lr = list(reversed(L))
print(L==Lr)
그러니까 L 안에 있는 list에다가 reversed()해준 것이다
그리고 만약 L과 reversed한 Lr이 같은지 여부를 판단해서 출력해라
만약에 앞뒤가 똑같으면 출력하는 것이다
L = [1,2,3,2,1]
print(L==L[::-1])
# 이게 가장 좋은 코드
이게 가장 좋다 simple is the best
m=[]
m.append(1)
m.append(3)
m.append(5)
m
빈 리스트 만들어 주고 그 안에 append 매서드를 사용해서 계속 숫자를 넣는다
많이 쓰는 방식이다
n =[1,3,5,7]
n.insert(2,100)
n
인서트. n 리스트 에다가 3번째 자리에 100을 넣어준다
그리고 결과값은 아래와 같다
[1, 3, 100, 5, 7]
# 가장 큰 수를 출력하다
score = []
for i in range(5):
x = int(input("점수를 입력하시오"))
score.append(x)
print(max(score))
range()함수를 보면 5번 반복한닥 ㅗ나와있다.
5번 반복해서 score 리스트 안에 숫자를 넣는다
그리고 그 숫자 중에서 가장 큰 것을 보여준다 끝
# 계속 입력받아 리스트 name 에 추가하고 none 이 입력되면 루프를 끝내는 프로그램
t = 0
name = []
while t >= 0:
x = input("enter name:")
if x == "none":
break
t=+1
name.append(x)
print(name)
이것도 먼저 2개를 생각해야 한다. while을 돌리기 위해서 처음에 들어가는 변수
그리고 name 또는 다른 이름을 붙는 리스트 를 만들어서 그 안에 문자열을 넣어주는 걸 생각해야 한다
그 문자가 none이라고 친절하게 알려줬다.
# extend 메서드
l = [1,3,5]
l.extend('python')
l
[1, 3, 5, 'p', 'y', 't', 'h', 'o', 'n']
파이썬 영문이 하나하나 들어간다. 절대 파이썬 전체로 안들어감을 유의해야 한다
l = [1,3,5]
l.extend([10,20])
l
# 중첩이 아니다
[1, 3, 5, 10, 20]
l = [1,3,5]
l.extend({'one':1,'two':2})
l
[1, 3, 5, 'one', 'two']
l = [1,3,5]
l.extend(l)
l
[1, 3, 5, 1, 3, 5]
f= ['apple','banana','melon','kiwi']
r=f.pop()
r
# 가장 끝에 것을 지운다. 뭘 지웠다. 이런게 나온다 pop
'kiwi'
# 지운거 말고 나머지가 나온다
f
['apple', 'banana', 'melon']
c = ['red','blue','black','white']
r=c.remove('white')
print(r)
# 반환값이 없이 나온다
None
위의 코드는 쳐보면 나온다 remove와 pop의 차이점을 알았다.
pop은 뭐가 지워졌는지 어딘가에 저장이 되기 때문에 출력하면 나온다.
data = [4,7,8,1,2,5]
d = []
for i in range(len(data)):
if i%2==1:
d.append(i)
print(d)
|
[1, 3, 5] |
In [105]:
홀수가 나오는 코드이다. 1과 같으면 출력되는 것. 홀수이다
어떤 리스트를 받아서 그 리스트의 갯수만큼 for문을 돌려준다
for i in range(len(data)):
이건 정말 많이 쓰는 구문이기 때문에 그냥 외워도 무방하다..
굉장히 유용한 구문이다.
함정은 까먹는다는 것...
주어진 리스트에서 짝수를 찾아 삭제하는 코드
data = [4,7,8,1,2,5]
r = []
for i in range(len(data)):
if data[i]%2!=0:
r.append(data[i])
data = r
del r
print(data)
그러니까 data 리스트 안에 어떤 숫자가 있다.
그리고 data 안에 숫자만큼 for문을 돌린다.
for문 안에 다시 if문이 있다.
if문의 뜻은.. data 리스트 안에 어떤 숫자가 0으로 나눠떨어지지 않으면
리스트 r에다가 해당숫자를 넣어준다
끝나고 나서 print(data) 하게 되면, 끝난다.
if문 안에서 0으로 나눠 떨어지지 않으니까 이게 홀수이다.
마지막에 굳이 del r 이거 넣어주지 않아도 된다.
l = [1,3,5,7,9]
m = l
id(l);id(m)
m[2]=10
m
[1, 3, 10, 7, 9]
위와 같이 id를 출력하면 l과 m이 똑같은 id로 출력이 된다
인덱싱 2번째에 10을 넣어주면 가운데 떡 하니 5였던 숫자가 10으로 바뀌게 된다
# count(x) 리스트에 있는 데이터 x가 몇 개 인지 반환
l = [3,5,4,1,2,3,2,2,5]
l.count(2)
3
l 리스트 안에 2가 3개 있다.
l = [5,10,2,7,4,2,3]
l.sort() #오름차순으로 바뀐다 오호~~~~
l
[2, 2, 3, 4, 5, 7, 10]
sort() 메서드를 사용하면 오름 차순으로 바뀐다
m = ['python','java','c++','javascript']
m.sort()
m
['c++', 'java', 'javascript', 'python']
이것도 이거 아마 아스키코드? 가 빠른 것이 가장 앞에 나오게 된다.
o = [4,10,-5,0,-8,1,-9]
o.sort(key=abs)
o
[0, 1, 4, -5, -8, -9, 10]
여기에서 절대값으로 정렬하고 싶으면 key=abs를 쓰면 된다
그리고 sort 매서드를 쓸 떄는 o 의 리스트 자체를 바꿔버린다.
반면에 o_1(sorted) 이렇게 쓰면 새로운 리스트를 만들고,
그 안에 숫자를 정렬하게 된다.
p = ['python','java','c++','javascript']
p.sort()
p.sort(key=len,reverse=True)
p
['javascript', 'python', 'java', 'c++']
key = len
이렇게 쓰면 길이순으로 정렬이 된다
그런데 거기다가 reverse를 해줘으니..
결국 길이가 긴 것부터 서두에 나오게 된다
M=[[4,8,1,5],[9,2,3,3],[8,7,9,7]]
print(M[0])
[4, 8, 1, 5]
M에 있는 다양한 리스트 중에서 어떤 걸 바꿔야 하는지 보여준다.
(M[0][3])
5
이건 첫번째 리스트 네번째 문자를 보여준다.
M.sort(key=sum)
M
# 리스트 안의 값을 다 더해서 가장 낮은 값부터 출력
[[9, 2, 3, 3], [4, 8, 1, 5], [8, 7, 9, 7]]
이런 기능도 있는 것이 신기하다. 리스트 안에 값을 다 더해줘서 낮은 값 부터 출력
M.sort(key=sum,reverse=True)
M
[[8, 7, 9, 7], [4, 8, 1, 5], [9, 2, 3, 3]]
이건 위에서 했던 것인데 다 더해서 원래는 낮은 값부터 출력해야 하지만
이 또한 reverse =True를 넣어줌으로써 높은 값부터 출력하게 해준다
a = [[1,2,3,],[4,5,6,7]]
b=a.copy()
b
[[1, 2, 3], [4, 5, 6, 7]]
copy 메서드를 쓰면 낮은 값부터 출력하게 된다.
b[1][2]=100
b
[[1, 2, 3], [4, 5, 100, 7]]
테스트 삼아 b리스트 안에 있는 값을 바꿔준다
print(a)
[[1, 2, 3], [4, 5, 100, 7]]
print(b)
[[1, 2, 3], [4, 5, 100, 7]]
하지만 a,b 둘 다 바뀌어있음을 알게 되었다.
import copy
a = [[1,2,3,],[4,5,6,7]]
b=copy.deepcopy(a)
b
[[1, 2, 3], [4, 5, 6, 7]]
b[1][2] = 100
print(a)
[[1, 2, 3], [4, 5, 6, 7]]
print(b)
[[1, 2, 3], [4, 5, 100, 7]]
리스트 unpacking
* 자리에는 0 개 이상 데이터가 리스트로 저장한다
[a,b,*c]=[10,20,30,40]
print(a,b,c)
10 20 [30, 40]
[a,b,*c]=[5,6]
print(a,b,c)
5 6 []
[a,*b,c]=[1,2,3,4,5]
print(a,b,c)
1 [2, 3, 4] 5
*문자
이건 채워넣는 것이다
a = []
for x in range(1,11):
a.append(x*x)
print(a)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
그리고 우리가 많이 썼던 for문을 한 번 다시 보겠다.
제곱을 나타내는 for문이다
a = [x*x for x in range(1,11)]
print(a)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
이건 처음 보는 것이다
for문을 일렬로 썼다
# [표현식 for 변수 in iterable 객체 (if 조건식)]
b = [2**i for i in range(11)]
b
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
c = [ n for n in L if n%2 ==0]
c
[2, 2]
d = [x*y for x in range(1,4) for y in range(3,7)]
d
[3, 4, 5, 6, 6, 8, 10, 12, 9, 12, 15, 18]
for문의 사용법이다.
L=[4,7,8,1,2,5]
u = [ n for n in L if n%2 !=0]
u
[7, 1, 5]
이 또한 위에서 했던 것을 1줄로 표현하였다.
a = [3,-1,5,10,-11,14,2,-8,-5]
b = [abs(x) for x in a]
b
[3, 1, 5, 10, 11, 14, 2, 8, 5]
w = ['hello','python','programming','java']
y = [len(x) for x in w]
print(y)
[5, 6, 11, 4]
T1 = (1,3,5,7)
T2 = 5,7,9
T3 = 2,4,6,
type(T1)
tuple
a=3 ; b = 4; c=5
a,b,c
(3, 4, 5)
마지막으로 몇 가지 튜플 형식을 실습하고 끝났다.