본문 바로가기
CS/Python

[SW&Tools] 1. Introduction to python

by 쵸빙 2020. 4. 23.

python 실습을 담은 코드를 실행시켜보겠다.

 

 

1.1 Elementary Data Types

The standard Python library provides support for various elementary data types, including integers, booleans, floating points, and strings. A summary of the data types is shown in the table below.

 

  Data Type Example
Number Integer x = 4
  Long integer x = 15L
  Floating point x = 3.142
  Boolean x = True
Text Character x = 'c'
  String x = "this"

 

 

x = 4					# integer
print(x, type(x))

y = True				# boolean (True, False)
print(y, type(y))

z = 3.7					# floating point
print(z, type(z))

s = "This is a string"	# string
print(s, type(s))

4 <class 'int'>
True <class 'bool'>
3.7 <class 'float'>
This is a string <class 'str'>

 

 

The following are some of the arithmetic operations available for manipulating integers and floating point numbers.

 

x = 4			# integer
x1 = x + 4		# addition
x2 = x * 3		# multiplication
x += 2			# equivalent to x = x + 2
x3 = x
x *= 3			# equivalent to x = x * 3
x4 = x
x5 = x % 4		# modulo (remainder) operator

z = 3.7			# floating point number
z1 = z - 2		# subtraction
z2 = z / 3		# division
z3 = z // 3		# integer division
z4 = z ** 2		# square of z
z5 = z4 ** 0.5	# square root
z6 = pow(z, 2)	# equivalent to square of z
z7 = round(z)	# rounding z to its nearest integer
z8 = int(z)		# type casting float to int

print(x, x1, x2, x3, x4, x5)
print(z, z1, z2, z3, z4)
print(z5, z6, z7, z8)

18 8 12 6 18 2
3.7 1.7000000000000002 1.2333333333333334 1.0 13.690000000000001
3.7 13.690000000000001 4 3

 

 

 

The following are some of the functions provided by the math module for integers and floating point numbers.

 

import math

x = 4
print(math.sqrt(x))			# sqrt(4) = 2
print(math.pow(x, 2))		# 4**2 = 16
print(math.exp(x))			# exp(4) = 54.6
print(math.log(x, 2))		# log based 2 (default is natural logarithm)
print(math.fabs(-4))		# absolute value
print(math.factorial(x))	# 4! = 4 x 3 x 2 x 1 = 24

z = 0.2
print(math.ceil(z))			# ceiling function
print(math.floor(z))		# floor function
print(math.trunc(z))		# truncate function

z = 3 * math.pi				# math.pi = 3.141592653589793
print(math.sin(z))			# sine function
print(math.tanh(z))			# arctan function

x = math.nan				# not a number
print(math.isnan(x))

x = math.inf				# infinity
print(math.isinf(x))

2.0
16.0
54.598150033144236
2.0
4.0
24
1
0
0
3.6739403974420594e-16
0.9999999869751758
True
True

 

 

 

The following are some of the logical operations available for booleans

 

y1 = True
y2 = False

print(y1 and y2)		# logical AND
print(y1 or y2)			# logical OR
print(y1 and not y2)	# logical NOT

False
True
True

 

 

The following are some of the operations and functions for manipulation strings.

 

s1 = "This"

print(s1[1:])			# print last three characters
print(len(s1))			# get the string length
print("Length of string is " + str(len(s1)))	# get the string length
print(s1.upper())		# convert to upper case
print(s1.lower())		# convert to lower case

s2 = "This is a string"
words = s2.split(' ')	# split the string into words
print(words[0])
print(s2.replace('a', 'another'))	# replace "a" with "another"
print(s2.replace('is', 'at'))		# replace "is" with "at"
print(s2.find("a"))					# find the position of "a" in s2
print(s1 in s2)			# check if s1 is a substring of s2

print(s1 == 'This')		# equality comparison
print(s1 < 'That')		# inequality comparison
print(s2 + " too")		# string concatenation
print((s1 + " ") * 3)	# replicate the string 3 times

his
4
Length of string is 4
THIS
this
This
This is another string
That at a string
8
True
True
False
This is a string too
This This This

 

 

 

1.2 Compound Data Types

The following examples show how to create and manipulate a list object

 

intlist = [1, 3, 5, 7, 9]
print(type(intlist))
print(intlist)
intlist2 = list(range(0, 10, 2))		# range[startvalue, endvalue, stepsize]
print(intlist2)

print(intlist[2])		# get the third elemet of the list
print(intlist[:2])		# get the first two elements
print(intlist[2:])		# get the last three elements of the list
print(len(intlist))		# get the number of elements in the list
print(sum(intlist))		# sums up elements of the list

intlist.append(11)		# insert 11 to end of the list
print(intlist)
print(intlist.pop())	# remove last element of the list
print(intlist)
print(intlist + [11. 13, 15])	# concatenate two lists
print(intlist * 3)		# replicate the list
intlist.insert(2, 4)	# insert item 4 at index 2
print(intlist)
intlist.sort(reverse = True)	# sort elements in descending order
print(intlist)

<class 'list'>
[1, 3, 5, 7, 9]
[0, 2, 4, 6, 8]
5
[1, 3]
[5, 7, 9]
5
25
[1, 3, 5, 7, 9, 11]
11
[1, 3, 5, 7, 9]
[1, 3, 5, 7, 9, 11, 13, 15]
[1, 3, 5, 7, 9, 1, 3, 5, 7, 9, 1, 3, 5, 7, 9]
[1, 3, 4, 5, 7, 9]
[9, 7, 5, 4, 3, 1]

 

 

 

mylist = ['this', 'is', 'a', 'list']
print(mylist)
print(type(mylist))

print("list" in mylist)		# check whether "list" is in mylist
print(mylist[2])			# show the 3rd element of the list
print(mylist[:2])			# show the first two elements of the list
print(mylist[2:])			# show the last two elements of the list
mylist.append("too")		# insert element to end of the list

separator = " "
print(separator.join(mylist))	# merge all elements of the list into a string

mylist.remove("is")			# remove element from list
print(mylist)

['this', 'is', 'a', 'list']
<class 'list'>
True
a
['this', 'is']
['a', 'list']
this is a list too
['this', 'a', 'list', 'too']

 

join은 mylist를 separate로 구분해서 하나로 합쳐준다.

 

 

 

 

The following examples show how to create and manipulate a dictionary object.

 

abbrev = {}
abbrev['MI'] = "Michigan"
abbrev['MN'] = "Minnesota"
abbrev['TX'] = "Texas"
abbrev['CA'] = "California"

print(abbrev)
print(abbrev.keys())		# get the keys of the dictionary
print(abbrev.values())		# get the values of the dictionary
print(len(abbrev))			# get number of key-value pairs

print(abbrev.get('MI'))
print("FL" in abbrev)
print("CA" in abbrev)

keys = ['apples', 'oranges', 'bananas', 'cherries']
values = [3, 4, 2, 10]
fruits = dict(zip(keys, values))
print(fruits)
print(sorted(fruits))		# sort keys of dictionary

from operator import itemgetter
print(sorted(fruits.items(), key = itemgetter(0)))		# sort by key of dictionary
print(sorted(fruits.items(), key = itemgetter(1)))		# sort by value of dictionary

{'MI': 'Michigan', 'MN': 'Minnesota', 'TX': 'Texas', 'CA': 'California'}
dict_keys(['MI', 'MN', 'TX', 'CA'])
dict_values(['Michigan', 'Minnesota', 'Texas', 'California'])
4
Michigan
False
True
{'apples': 3, 'oranges': 4, 'bananas': 2, 'cherries': 10}
['apples', 'bananas', 'cherries', 'oranges']
[('apples', 3), ('bananas', 2), ('cherries', 10), ('oranges', 4)]
[('bananas', 2), ('apples', 3), ('oranges', 4), ('cherries', 10)]

 

딕셔너리는 위와 같이 정의할 수 있고, key와 그에 해당하는 value값을 가진다.

zip은 key와 value를 합쳐서 dictionary 형태로 만들어준다.

itemgetter는 sort를 몇 번째 알파벳을 기준으로 정렬할지 알려준다.

 

 

 

The following examples show how to create and manipulate a tuple object. Unlike a list, a tuple object is immutable, i.e., they cannot be modified after creation.

 

MItuple = ('MI', 'Michigan', 'Lansing')
CAtuple = ('CA', 'California', 'Sacramento')
TXtuple = ('TX', 'Texas', 'Austin')

print(MItuple)
print(MItuple[1:])

states = [MItuple, CAtuple, TXtuple]	# this will create a list of tuples
print(states)
print(states[2])
print(states[2][:])
print(states[2][1:])

states.sort(key = lambda state: state[2])	# sort the states by their capital cities
print(states)

('MI', 'Michigan', 'Lansing')
('Michigan', 'Lansing')
[('MI', 'Michigan', 'Lansing'), ('CA', 'California', 'Sacramento'), ('TX', 'Texa
s', 'Austin')]
('TX', 'Texas', 'Austin')
('TX', 'Texas', 'Austin')
('Texas', 'Austin')
[('TX', 'Texas', 'Austin'), ('MI', 'Michigan', 'Lansing'), ('CA', 'California', 'S
acramento')]

 

tuple은 위와 같이 선언할 수 있고, 원소 대신 tuple의 이름을 나열해서 tuple들을 모은 리스트도 만들 수 있다.

여기서 sort하는 데 key lambda가 있는 이유는 inline 함수처럼 딱 한 번만 쓰는 함수를 정의하기 위한 용도이다.

 

 

 

1.3 Control Flow Statements

Similar to other programming languages, the control flow statements in Python include if, for, and while statements. Examples on how to use these statements are shown below.

 

# using if-else statement

x = 10

if x % 2 == 0:
	print("x = ", x, " is even")
else:
	print("x = ", x, " is odd")
    
if x > 0:
	print("x = ", x, " is positive")
elif x < 0:
	print("x = ", x, " is negative")
else:
	print("x = ", x, " is neither positive nor negative")

x = 10 is even
x = 10 is positive

 

%는 나누기를 한 뒤 생기는 나머지를 연산해준다. if, else 또는 if, elif, else로 조건문을 결정할 수 있다.

 

 

 

 

# using for loop with a list

mylist = ['this', 'is', 'a', 'list']
for word in mylist:
	print(word.replace("is", "at"))
    
mylist2 = [len(word) for word in mylist]	# number of characters in each word
print(mylist2)

# using for loop with list of tuples
states = [('MI', 'Michigan', 'Lansing'), ('CA', 'California', 'Sacramento'),
			('TX', 'Texas', 'Austin')]
            
sorted_capitals = [state[2] for state in states]
sorted_capitals.sort()
print(sorted_capitals)

# using for loop with dictionary
fruits = {'apples' : 3, 'orange' : 4, 'bananas' : 2, 'cherries' : 10}
fruitnames = [k for (k, v) in fruits.items()]
print(fruitnames)

that
at
a
latt
[4, 2, 1, 4]
['Austin', 'Lansing', 'Sacramento']
['apples', 'oranges', 'bananas', 'cherries']

 

  첫 번째에서는 for loop를 돌리면서 mylist에서 is가 들어가 있는 것을 모두 찾아내서 그 부분을 at으로 바꾼다.

th'is'에는 is가 있으니 th'at'으로 바뀌었고, 'is'도 'at'으로 바뀌었고 'list'도 'latt'으로 바뀌었다. 그 외에 'a'는 is가 안 들어가있지만 출력은 된다.

  mylist에 있는 모든 원소들의 길이를 mylist2라는 리스트로 for loop를 사용해서 만들었다.

  states라는 리스트에 있는 모든 원소들을 각 단계마다 state에 넣고 그 중 인덱스가 2인(3번째) 원소들을 모아서 sorted_capitals라는 리스트에 임시로 넣는다. sort() 함수는 맨 앞 알파벳을 기준으로 정렬해준다.

  dictionary 형태는 items() 함수를 사용하여 꺼내서 key값만 뽑아내서 fruitnames 리스트로 만들었다.

 

 

 

# using while loop
mylist = list(range(-10, 10))
print(mylist)

i = 0
while (mylist[i] < 0):
	i = i + 1
    
print("First non-negative number:", mylist[i])

[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
First non-negative number: 0

range함수는 첫번째 파라미터부터 두번째 파라미터-1까지 원소들을 반환해준다.

while 반복문을 사용하여 각 원소들이 음수일 때까지만 반복하며 하나씩 늘려서 최종적으로는 마지막 음수 인덱스의 원소 + 1의 mylist 원소를 반환해보니 0이 되었다.

 

 

 

 

1.4 User-Defined Functions

You can create your own functions in Python, which can be named or unnamed. Unnamed functions are defined using lambda keyword as shown in the previous example for sorting a list of tuples.

 

myfunc = lambda x: 3*x**2 - 2 * x + 3	# example of an unnamed quadratic function
print(myfunc(2))

11

여기서도 위에서와 같이 lambda를 사용하여 함수를 정의했다. 그래서 2라는 파라미터를 넣으면 x에 2가 들어간 결과를 반환해준다.

 

 

 

 

import math

# The following function will discard missing values from a list
def discard(inlist, sortFlag = False):	# default value for sortFlag is False
	outlist = []
    for item in inlist:
    	if not math.isnan(item):
        	outlist.append(item)
          
        if sortFlag:
        	outlist.sort()
        return outlist
        
mylist = [12, math.nan, 23, -11, 45, math.nan, 71]
print(discard(mylist, True))

[-11, 12, 23, 45, 71]

 

discard 함수에서는 nan이 맞으면 넘어가고 number가 맞으면 outlist에 추가한다.

default값으로는 sortFlag가 false이기 때문에 두 번째 파라미터로 아무것도 안 적으면 sort를 하지 않겠지만 마지막에서는 True를 넘겨줬으므로 sort를 하게 된다.

 

 

 

 

1.5 File I/O

 

You can read and write data from a list or other objects to a file.

 

states = [('MI', 'Michigan', 'Lansing'), ('CA', 'California', 'Sacramento'),
			('TX', 'Texas', 'Austin'), ('MN', 'Minnesota', 'St Paul')]
            
with open('states.txt', 'w') as f:
	f.write('\n'.join('%s, %s, %s' % state for state in states))

with open('states.txt', 'r') as f:
	for line in f:
    		fields = line.split(sep = ',')	# split each line into its respective fields
            print('State = ', fields[1], '(', fields[0], ')', 'Capital:', fields[2])

State= Michigan ( MI ) Capital: Lansing
State= California ( CA ) Capital: Sacramento
State= Texas ( TX ) Capital: Austin
State= Minnesota ( MN ) Capital: St Paul

파이썬에서 파일을 열고 싶으면 해당 파일이 코드가 들어있는 폴더에서부터 어떻게 이동해서 가능한지 적거나, 같은 폴더 안에 있는 경우에는 위처럼 파일 이름만 써도 되고, 아니라면 절대 경로를 써도 된다.

'w'로 open하는 경우는 write하는 목적이고, 'r'로 open하는 경우는 read하는 목적이다.

split은 원소들을 ,로 구분해서 fields에 리스트로 넣는다.

 

 

 

 

다음 시간에는 numpy와 pandas에 대해 배워보도록 하겠다.