List
리스트는 대괄호([])로 이루어져 있으며, 여러가지 자료를 다양한 위치에 담을 수 있다.
리스트는 보통 for문과 같이 쓰이는데, 리스트 안의 모든 원소를 반복할 때 순서대로 다루는 for문이 가장 적합하기 때문이다.
리스트는 위치와 순서가 정해져 있고 내부 내용을 자유롭게 바꿀 수 있으며 len()함수로 리스트의 길이 즉 원소의 개수를 반환받을 수도 있다.
# 리스트의 위치 출력
friends = ['Joseph', 'Glenn', 'Sally']
print(range(len(friends))) # [0, 1, 2]를 출력
# 리스트 슬라이싱
t = [9, 41, 12, 3, 74, 15]
t[1:3] # [41, 12]
t[:4] # [9, 41, 12, 3]
t[3:] # [3, 74, 15]
# 비어있는 리스트 만들고 원소 추가하기
a = list()
a.append('book')
a.append(99)
a.append('cookie')
print(a) # ['book', 99, 'cookie']
# in 연산자로 특정 값이 있는지 확인하기
some = [1, 9, 21, 10, 16]
9 in some # True
15 in some # False
20 not in some # True
# sort() 메소드로 정렬하기
friends = ['Joseph', 'Glenn', 'Sally']
friends.sort()
print(friends) # ['Glenn', 'Joseph', 'Sally']
print(friends[1]) # Joseph
# 내장함수와 리스트
nums = [3, 41, 12, 9, 74, 15]
print(len(nums)) # 6
print(max(nums)) # 74
print(min(nums)) # 3
print(sum(nums)) 154
print(sum(nums)/len(nums)) # 25.6
# input으로 받아온 값의 평균 구하기
# 1 list 사용 x
totla = 0
count = 0
while True:
inp = input('Enter a number: ')
if inp == 'done': break
value = float(inp)
total = total + value
count = count + 1
average = total / count
print('Average:', average)
# 2 list 사용 o
numlist = list()
while True:
inp = input('Enter a number: ')
if inp == 'done': break
value = float(inp)
numlist.append(value)
average = sum(numlist) / len(numlist)
print('Average:', average)
문자열은 .split()메소드를 통해 리스트로 만들 수 있다.
abc = 'With three words'
stuff = abc.split() # 공백을 기준으로 나눈다
print(stuff) # ['With', 'three', 'words']
# 공백이 아닌 다른 문자를 기준으로 나누기
line = 'first;second;third'
thing = line.split(';') # ['first', 'second', 'third']
Assignment
챕터 8의 Assignment는 두 개가 있었다.
그 중 첫 번째인 assignment 8.4는 romeo.txt 파일을 열고 한줄씩 루프를 돌린 뒤 각 줄에 대해 split() 메소드를 사용하여 리스트로 분할하고 각 줄의 각 단어에 대해 단어가 이미 목록에 있는지 확인해서 목록에 추가하지 않은 경우 append() 메소드를 사용하여 추가해야 했다. 그리고 루프가 끝나면 목록을 알파벳 순으로 정렬하고 출력해야 했다.
나의 풀이는 아래와 같다.
# ex_8_4
fname = input("Enter file name: ")
fh = open(fname)
lst = list()
for line in fh:
line = line.split()
for res in line:
if not res in lst:
lst.append(res)
lst.sort()
print(lst)
#print(line.rstrip())
두 번째인 assignment 8.5는 mbox-short 파일을 열고 한줄씩 루프를 돌린 뒤 'From '으로 시작하는 행을 찾아 split() 메소드를 사용하여 From 줄을 리스트로 분할하고 줄의 두 번째 단어 즉, 메시지를 보낸 사람의 전체 주소를 출력해야 했으며 마지막에 카운트를 출력해야 했다. 또한, split() 메소드를 사용하면 자연스레 해결되는 문제지만 'From: '으로 시작하는 행은 포함하면 안 됐고 카운트를 원하는 출력과 일치하도록 샘플 출력의 마지막 줄을 확인하여 출력 코드 또한 작성해야 했다.
나의 풀이는 아래와 같다.
#fname = input("Enter file name: ")
fh = open('mbox-short.txt')
count = 0
for line in fh:
line = line.rstrip()
if not line.startswith('From ') : continue
line = line.split()
line = line[1]
count = count + 1
print(line)
print("There were", count, "lines in the file with From as the first word")
'Python > PY4E' 카테고리의 다른 글
PY4E Chapter 10. Tuples (0) | 2022.08.08 |
---|---|
PY4E Chapter 9. Dictionaries (0) | 2022.08.08 |
PY4E Chapter 7. Files (0) | 2022.08.07 |
PY4E Chapter 6. Strings (0) | 2022.08.05 |
PY4E Chapter 5. Loops and Iterations (0) | 2022.08.05 |
댓글