>백엔드 개발 >파이썬 튜토리얼 >Python의 일반적인 내장 함수 소개

Python의 일반적인 내장 함수 소개

巴扎黑
巴扎黑원래의
2017-09-07 09:42:171385검색

일명 내장 기능은 가져오기 없이 바로 사용할 수 있습니다. 다음 글에서는 Python의 기본 학습을 위한 몇 가지 일반적인 내장 함수를 주로 소개합니다. 이 글에서는 샘플 코드를 통해 자세하게 소개하고 있습니다. 필요한 친구들은 에디터와 함께 배워 보세요.

서문

Python은 다양한 유형을 처리하기 위한 수많은 내장 함수를 제공합니다. 이러한 내장 함수의 기능은 여러 유형의 개체, 즉 여러 유형의 개체에 대해 유사한 작업을 수행할 수 있다는 것입니다. . 아래에서는 일반적인 작업에 대해 말할 것이 많지 않습니다. 자세한 소개를 살펴보겠습니다.

map()

map() 함수는 두 개의 매개변수를 허용합니다. 하나는 함수이고 다른 하나는 반복 가능한 객체(Iterable)입니다. map은 반복 가능한 객체의 각 요소에 들어오는 함수를 차례로 적용합니다. 그리고 결과를 반복자로 반환합니다.

예를 들어 f(x)=x^2 함수가 있는데 이 함수는 list[1,2,3,4,5,6]에 적용되어야 합니다. ,7 ,8,9] on: f(x)=x^2 ,要把这个函数作用到一个list[1,2,3,4,5,6,7,8,9]上:

运用简单的循环可以实现:


>>> def f(x):
...  return x * x
...
L = []
for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
 L.append(f(n))
print(L)

运用高阶函数map()


>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]

结果r是一个迭代器,迭代器是惰性序列,通过list()函数让它把整个序列都计算出来并返回一个list。

如果要把这个list所有数字转为字符串利用map()就简单了:


>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']

小练习:利用map()函数,把用户输入的不规范的英文名字变为首字母大写其他小写的规范名字。输入['adam', 'LISA', 'barT'],输出['Adam', 'Lisa', 'Bart']


def normalize(name):
  return name.capitalize()

 l1=["adam","LISA","barT"]
 l2=list(map(normalize,l1))
 print(l2)

reduce()

reduce()函数也是接受两个参数,一个是函数,一个是可迭代对象,reduce将传入的函数作用到可迭代对象的每个元素的结果做累计计算。然后将最终结果返回。

效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

举例说明,将序列[1,2,3,4,5]变换成整数12345:


>>> from functools import reduce
>>> def fn(x, y):
...  return x * 10 + y
...
>>> reduce(fn, [1, 2, 3, 4, 5])
12345

小练习:编写一个prod()函数,可以接受一个list并利用reduce求积:


from functools import reduce
def pro (x,y):
  return x * y
 def prod(L):
  return reduce(pro,L)
 print(prod([1,3,5,7]))

map()reduce()综合练习:编写str2float函数,把字符串'123.456'转换成浮点型123.456


CHAR_TO_FLOAT = {
 '0': 0,'1': 1,'2': 2,'3': 3,'4': 4,'5': 5,'6': 6,'7': 7,'8': 8,'9': 9, '.': -1
}
def str2float(s):
 nums = map(lambda ch:CHAR_TO_FLOAT[ch],s)
 point = 0
 def to_float(f,n):
   nonlocal point
   if n==-1:
    point =1
    return f
   if point ==0:
    return f*10+n
   else:
    point =point *10
    return f + n/point

 return reduce(to_float,nums,0)#第三个参数0是初始值,对应to_float中f

filter()

filter()函数用于过滤序列,filter()也接受一个函数和一个序列,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

举例说明,删除list中的偶数:


def is_odd(n):
 return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]

小练习:用filter()求素数

计算素数的一个方法是埃氏筛法,它的算法理解起来非常简单:

首先,列出从2开始的所有自然数,构造一个序列:

2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取序列的第一个数2,它一定是素数,然后用2把序列的2的倍数筛掉:

3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取新序列的第一个数3,它一定是素数,然后用3把序列的3的倍数筛掉:

5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取新序列的第一个数5,然后用5把序列的5的倍数筛掉:

7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

不断筛下去,就可以得到所有的素数。

用Python实现这个算法,先构造一个从3开始的期数数列:


def _odd_iter(): 
n = 1
 while True:
  n = n + 2
  yield n
#这是一个生成器,并且是一个无线序列

定义一个筛选函数:


def _not_pisible(n):
 return lambda x: x % n > 0

定义一个生成器不断返回下一个素数:


def primes():
 yield 2
 it = _odd_iter() # 初始序列
 while True:
  n = next(it) # 返回序列的第一个数
  yield n
  it = filter(_not_pisible(n), it) # 构造新序列

打印100以内素数:


for n in primes():
 if n < 100:
  print(n)
 else:
  break

sorted()

python内置的sorted()函数可以对list进行排序:


>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]

sorted()

간단한 루프를 사용하면 다음을 달성할 수 있습니다.


>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]

고차 함수 map() 사용: 🎜🎜🎜🎜
>>> sorted([&#39;bob&#39;, &#39;about&#39;, &#39;Zoo&#39;, &#39;Credit&#39;], key=str.lower)
[&#39;about&#39;, &#39;bob&#39;, &#39;Credit&#39;, &#39;Zoo&#39;]
🎜Result r Iterator입니다. Iterator는 게으른 시퀀스입니다. list() 함수를 통해 전체 시퀀스를 계산하고 목록을 반환할 수 있습니다. 🎜🎜🎜이 목록의 모든 숫자를 문자열로 변환하려면 map()을 사용하는 것이 간단합니다. 🎜🎜🎜🎜
>>> sorted([&#39;bob&#39;, &#39;about&#39;, &#39;Zoo&#39;, &#39;Credit&#39;], key=str.lower, reverse=True)
[&#39;Zoo&#39;, &#39;Credit&#39;, &#39;bob&#39;, &#39;about&#39;]
🎜🎜간단한 연습: 🎜map( )사용자가 입력한 비표준 영어 이름을 첫 글자는 대문자, 그 외는 소문자의 표준 이름으로 변경하는 기능입니다. 입력 ['adam', 'LISA', 'barT'], 출력 ['Adam', 'Lisa', 'Bart']🎜🎜🎜🎜
L = [(&#39;Bob&#39;, 75), (&#39;Adam&#39;, 92), (&#39;Bart&#39;, 66), (&#39;Lisa&#39;, 88)]
def by_score(t):
 for i in t:
   return t[1]
L2=sorted(L,key= by_score)
print(L2)
🎜🎜 🎜reduce()🎜🎜🎜🎜reduce()함수는 두 개의 매개변수도 허용합니다. 하나는 함수이고 다른 하나는 반복 가능한 객체입니다. 감소는 전달된 함수를 반복 가능한 객체의 각 요소에 적용합니다. . 결과는 누적적으로 계산됩니다. 그런 다음 최종 결과를 반환합니다. 🎜🎜🎜효과는 다음과 같습니다: reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)🎜🎜🎜예를 들어 , 시퀀스 [1,2,3,4,5]를 정수 12345로 변환하세요. 🎜🎜🎜🎜
L2=sorted(L,key=lambda t:t[1])
print(L2)
🎜간단한 연습: prod() 함수를 작성하세요. 허용됩니다. 목록을 사용하고 곱을 계산하기 위해 Reduce를 사용합니다. 🎜🎜🎜🎜rrreee🎜map()reduce() 종합 연습: str2float 함수를 작성하여 부동 소수점 유형 123.456🎜🎜🎜🎜rrreee🎜🎜🎜filter()🎜🎜🎜🎜filter() 함수는 시퀀스를 필터링하는 데 사용됩니다. filter() code>는 또한 함수와 A 시퀀스를 허용하며, <code>filter()는 전달된 함수를 각 요소에 차례로 적용한 다음 반환 값이 True인지 False인지에 따라 요소를 유지할지 아니면 삭제할지 결정합니다. . 🎜🎜🎜예를 들어, 목록에서 짝수를 삭제하세요: 🎜🎜🎜🎜rrreee🎜🎜작은 연습: 소수를 찾으려면 filter()를 사용하세요. 🎜🎜🎜소수를 계산하는 한 가지 방법은 에를리히 체(Ehrlich sieve) 방법이며, 알고리즘은 다음과 같습니다. 이해하기 매우 간단합니다. 🎜🎜🎜먼저 2부터 시작하는 모든 자연수를 나열하고 수열을 구성합니다: 🎜🎜🎜2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 , 17, 18, 19, 20, ...🎜🎜🎜수열의 첫 번째 숫자 2(소수여야 함)를 선택한 다음 2를 사용하여 수열에서 2의 배수를 필터링합니다. : 🎜🎜🎜3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...🎜🎜🎜첫 번째 숫자를 선택하세요 3은 소수여야 하며, 3을 사용하여 시퀀스에서 3의 배수를 필터링합니다: 🎜🎜🎜5, 6, 7, 8, 9, 10, 11, 12, 13, 14 , 15, 16, 17, 18, 19, 20, .. .🎜🎜🎜새 수열의 첫 번째 숫자 5를 가져온 다음 5를 사용하여 수열에서 5의 배수를 필터링합니다. 🎜🎜🎜7, 8 , 9, 10, 11, 12, 13, 14, 15, 16, 17 , 18, 19, 20, ...🎜🎜🎜계속 체에 걸러내면 소수를 모두 얻을 수 있습니다. 🎜🎜🎜이 알고리즘을 구현하려면 Python을 사용하세요. 먼저 3부터 시작하는 마침표 시퀀스를 구성하세요. 🎜🎜🎜🎜🎜rrreee🎜 필터링 함수 정의: 🎜🎜🎜🎜rrreee🎜 다음 소수를 연속적으로 반환하는 생성기 정의: 🎜🎜 🎜🎜rrreee🎜100 이내의 소수 인쇄: 🎜🎜🎜🎜rrreee🎜🎜🎜sorted()🎜🎜🎜🎜Python의 내장 sorted() 함수는 목록을 정렬할 수 있습니다: 🎜🎜🎜🎜rrreee 🎜 sorted() 함수도 고차 함수이며 사용자 정의 정렬을 구현하기 위해 키 함수를 허용할 수도 있습니다. 🎜🎜🎜🎜rrreee🎜 key로 지정된 함수는 목록을 작성하고 키 함수에서 반환된 결과에 따라 정렬합니다.🎜🎜

默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。如果想忽略大小写可都转换成小写来比较:


>>> sorted([&#39;bob&#39;, &#39;about&#39;, &#39;Zoo&#39;, &#39;Credit&#39;], key=str.lower)
[&#39;about&#39;, &#39;bob&#39;, &#39;Credit&#39;, &#39;Zoo&#39;]

要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True


>>> sorted([&#39;bob&#39;, &#39;about&#39;, &#39;Zoo&#39;, &#39;Credit&#39;], key=str.lower, reverse=True)
[&#39;Zoo&#39;, &#39;Credit&#39;, &#39;bob&#39;, &#39;about&#39;]

小练习:假设我们用一组tuple表示学生名字和成绩:L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] 。用sorted()对上述列表分别按c成绩从高到低排序:


L = [(&#39;Bob&#39;, 75), (&#39;Adam&#39;, 92), (&#39;Bart&#39;, 66), (&#39;Lisa&#39;, 88)]
def by_score(t):
 for i in t:
   return t[1]
L2=sorted(L,key= by_score)
print(L2)

运用匿名函数更简洁:


L2=sorted(L,key=lambda t:t[1])
print(L2)

위 내용은 Python의 일반적인 내장 함수 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.