파이썬에서 반복문에 사용되는 객체를 이터러블하다라고 하며,
반복되는 객체로 리스트, 튜플, 딕셔너리, 세트, range 등 여러개가 있다.
>>> list = [1, 2, 3]
>>> a = 1
#불가능. 에러.
>>> print(iter(a))
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <module>
print(iter(a))
TypeError: 'int' object is not iterable
#가능
>>> print(iter(list))
<list_iterator object at 0x103725420>
>>> if 'kim' in contacts :
print('yes')
yes
>>> 'Korean' in scores
True
>>> 'Reading' in scores
False
중괄호 {}
를 사용한다.#중복 없음
>>> numbers = {2, 1, 3, 2, 2, 6, 7, 6, 290}
>>> numbers
{1, 2, 3, 290, 6, 7}
>>> mySet = set('Banana')
>>> mySet
{'n', 'a', 'B'}
#for도 마찬가지
>>> for i in numbers :
print(i, end = ' ')
1 2 3 290 6 7
#순서가 없다.
>>> fruit = {'Apple', 'Banana', 'Pineapple'}
>>> fruit
{'Banana', 'Apple', 'Pineapple'}
#인덱스 사용 불가
>>> numbers[0]
Traceback (most recent call last):
File "<pyshell#82>", line 1, in <module>
numbers[0]
TypeError: 'set' object is not subscriptable
>>> len(numbers)
3
>>> mySet = {1.0, 2.0, 'Hello world', (1, 2, 3)}
>>> mySet
{1.0, 2.0, (1, 2, 3), 'Hello world'}
>>> numbers.add(292929)
>>> numbers
{1, 2, 3, 290, 292929, 6, 7}
>>> A = {1, 2, 3}
>>> B = {1, 2, 3}
>>> A == B
True
>>> A = {1, 2, 3, 4, 5}
>>> A > B
True
# .issubset() - 이즈 서브 셋, 교집합(부분집합)이냐?
>>> B.issubset(A)
True
# .issuperset() - 이즈 슈퍼 셋, 상위집합(확대집합??)이냐?
>>> A.issuperset(B)
True
# .isdisjoint() - 이즈 디스 조인트, 두 집합이 공통 원소를 갖지 않는가?
A.isdisjoint(B)
False
B.isdisjoint(A)
False
>>> A = {1, 2, 3, 4, 5}
>>> B = {1, 2, 3}
#합집합
>>> A | B #기호
{1, 2, 3, 4, 5}
>>> A.union(B) #메서드
{1, 2, 3, 4, 5}
#교집합
>>> A & B
{1, 2, 3}
>>> A.intersection(B)
{1, 2, 3}
#차집합
>>> A - B
{4, 5}
>>> A.difference(B)
{4, 5}
>>> B.difference(A) #차집합은 빼기라서 순서에 영향을 받는다.
set()
Q. 왜 리스트로 감싸야 가능하지?
A. 리스트 괄호를 빼니까 에러남. 있는지 확인하는 거니까 순서가 뒤바뀌는건 상관없잖아?
partyA = set(['Park', 'Kim', 'Lee'])
partyB = set(['Park', 'Choi'])
print('파티에 동시 참석한 사람은 {}입니다.'.format(partyA & partyB))
=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1030\test.py ==============================
파티에 동시 참석한 사람은 {'Park'}입니다.
word = set() #소괄호를 사용한다.
외부파일 proverbs.txt 필요 (영어로 문장을 적은 파일)
스플릿은 리스트를 생성한다고 적어두기.
#영문인 글자를 소문자로 만들어 반환.
def process(w) :
output = ' '
for ch in w :
if (ch.isalpha()) :
output += ch
return output.lower()
words = set()
#파일 열기
fname = input('파일 이름 입력 : ')
file = open(fname, 'r') #r은 읽기 모드, w는 쓰기 모드
#파일의 모든 줄에 대하여 반복
for line in file : #마침표를 기준 한 줄씩 읽어 온다.
lineWords = line.split() # 한 줄에서 공백을 기준하여 자른다.
for word in lineWords :
words.add(process(word)) #공백 세트에 함수 process()를 사용하여 걸러준 후 단어를 넣어준다.
#스플릿은 리스트를 생성한다.
print('사용된 단어의 개수 = ', len(words))
print(words)
#출력 시 단어의 순서가 계속해서 바뀌는걸 알 수 있다.
>>> contacts = {'kim' : '01012345678', 'Park' : '01012345679', 'Lee' : '010123456780'}
>>> contacts
{'kim': '01012345678', 'Park': '01012345679', 'Lee': '010123456780'}
#대괄호(인덱싱)
>>> contacts['kim']
'01012345678'
#소괄호(.get() 메소드)
>>> contacts.get('kim')
'01012345678'
.get() 메소드에서 찾을 단어를 적고 , 뒤에 찾는 단어가 없는 경우 문자열을 넣어 대신 출력할 수 있다.
english_dict = dict()
# 빈 딕셔너리에 값 넣기
english_dict['one'] = '하나'
english_dict['two'] = '둘'
english_dict['three'] = '셋'
#찾을 단어 입력 기능
word = input('영문 단어를 입력하세요 : ')
print(english_dict.get(word, '없음'))
딕셔너리는 .items()을 사용하여 키와 값을 동시에 부른다.
>>> for item in scores.items() :
print(item)
('Korean', 80)
('Math', 90)
('English', 80)
# item() 메소드가 없는 경우 키만 나온다.
>>> for item in scores :
print(item)
Korean
Math
English
추가 시 맨 뒤에 위치 함.
#추가
>>> contacts['Choi'] = '01056781234'
>>> contacts
{'kim': '01012345678', 'Park': '01012345679', 'Lee': '010123456780', 'Choi': '01056781234'}
#삭제 .pop() 메소드
>>> contacts.pop('kim')
'01012345678'
>>> contacts
{'Park': '01012345679', 'Lee': '010123456780', 'Choi': '01056781234'}
#삭제 del
del contacts['Choi']
contacts
{'Park': '01012345679', 'Lee': '010123456780', 'Kim': '01012345678'}
dic = {input('한글 : 영어 << 형식으로 입력해주세요 : ')}
=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1030\test.py ==============================
한글 : 영어 << 형식으로 입력해주세요 : 바나나 : Banana
dic
{'바나나 : Banana'}
#키 정렬
>>> sorted(scores)
['English', 'Korean', 'Math']
#값 정렬 시 .values()를 붙여 줘야 함.
>>> sorted(scores.values())
[80, 80, 90]
table = {'B4' : 'Before',
'TX' : 'Thanks',
'BBL' : 'Be Back Later',
'BCNU' : 'Be Seeing You',
'HAND' : 'Have A Nice Day',
'CU' : 'See You',
}
word = input('번역할 문장을 입력하시오 : ').split( )
sentence = ''
for i in word :
if i in table :
sentence += table[i] + ' '
else :
sentence += i + ' '
print(sentence)
외부파일 proverbs.txt 필요 (영어로 문장을 적은 파일)
fname = input('파일 이름 : ')
file = open(fname, 'r')
table = dict()
for line in file :
words = line.split()
for word in words :
if word not in table:
table[word] = 1
else :
table[word] += 1
print(table)
string = input('문자열을 입력하세요 : ')
countTable = {}
for letter in string :
countTable[letter] = countTable.get(letter, 0) + 1
print(countTable)
sentence = input('문자열을 입력하세요 : ')
table = { 'alphas' : 0, 'digits' : 0, 'spaces' : 0 }
for i in sentence :
if i.isalpha() :
table['alphas'] += 1
if i.isdigit() :
table['digits'] += 1
if i.isspace() :
table['spaces'] += 1
print(table)