본문 바로가기
Python/PY4E

PY4E Chapter 8. Lists

by 전자여우 2022. 8. 8.

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

댓글