日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python3字符串处理,高效切片

發布時間:2023/11/30 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3字符串处理,高效切片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

高級技巧:切片,迭代,列表,生成器

切片

L = ['Hello', 'World', '!']print("-------1.一個一個取-------") print(L[0]) print(L[1]) print(L[2])print("-------2.開辟一個新列表把內容存進去-------") r = [] for i in range(3):r.append(L[i])print(r)print("-------3.切片操作-------") print("L[0:3]", L[0:3]) print("L[:3]", L[:3]) print("L[1:3]", L[1:3]) print("L[-1]", L[-1]) print("L[-2:]", L[-2:]) print("L[-2:-1]", L[-2:-1])print("_____________切片操作詳解——————————————————————") L = list(range(1, 100)) print(L)print(L[:10]) print(L[5:10]) print(L[-10]) print(L[-10:]) print(L[:-80]) print(L[10:-80])print("前10個數每隔2個取一個") print(L[::]) print(L[:10:2]) print("所有數每隔5個取一個") print(L[::5])print("一個例題,把字符串前后的空格刪除") def trim(s):length = len(s) - 1if length < 0:return ''last = lengthwhile s[ length ] == ' ' :length -= 1last = lengthif length < 0:return ''first = 0while s[first] == ' ':first += 1last += 1l = s[first:last]return lif trim('hello ') != 'hello':print('測試失敗!') elif trim(' hello') != 'hello':print('測試失敗!') elif trim(' hello ') != 'hello':print('測試失敗!') elif trim(' hello world ') != 'hello world':print('測試失敗!') elif trim(' ') != '':print('測試失敗!') elif trim('') != '':print('測試失敗!') else:print('測試成功!')print("一個例題,查找最大數,最小數") def findMinAndMax(L):if len(L) == 0:return None, Nonemax, min = L[0], L[0]for i in L:if min > i:min = iif max < i:max = ireturn min, maxif findMinAndMax([]) != (None, None):print('測試失敗!') elif findMinAndMax([7]) != (7, 7):print('測試失敗!') elif findMinAndMax([7, 1]) != (1, 7):print('測試失敗!') elif findMinAndMax([7, 1, 3, 9, 5]) != (1, 9):print('測試失敗!') else:print('測試成功!')
  • 切片的幾個例子
def trim(s):length = len(s) - 1if length < 0:return ''last = lengthwhile s[ length ] == ' ' :length -= 1last = lengthif length < 0:return ''first = 0while s[first] == ' ':first += 1last += 1l = s[first:last]return lif trim('hello ') != 'hello':print('測試失敗!') elif trim(' hello') != 'hello':print('測試失敗!') elif trim(' hello ') != 'hello':print('測試失敗!') elif trim(' hello world ') != 'hello world':print('測試失敗!') elif trim(' ') != '':print('測試失敗!') elif trim('') != '':print('測試失敗!') else:print('測試成功!')def findMinAndMax(L):if len(L) == 0:return None, Nonemax, min = L[0], L[0]for i in L:if min > i:min = iif max < i:max = ireturn min, maxif findMinAndMax([]) != (None, None):print('測試失敗!') elif findMinAndMax([7]) != (7, 7):print('測試失敗!') elif findMinAndMax([7, 1]) != (1, 7):print('測試失敗!') elif findMinAndMax([7, 1, 3, 9, 5]) != (1, 9):print('測試失敗!') else:print('測試成功!')print("一個例題,取出字符,并全部轉換為小寫")L1 = ['Hello', 'World', 18, 'Apple', None] L2 = [s.lower() for s in L if isinstance(s, str)] print(L2)# 測試: print(L2) if L2 == ['hello', 'world', 'apple']:print('測試通過!') else:print('測試失敗!')

生成器

生成器詳解

g = (x * x for x in range(1, 10))for i in g:print(i)
  • 生成器特點
print("generator的函數,在每次調用next()的時候執行,""遇到yield語句返回,再次執行時從上次返回的yield語句""處繼續執行。")def odd():print('step 1')yield 1print('step 2')yield(3)print('step 3')yield(5)o = odd() print(next(o)) print(next(o)) print(next(o))
  • 應用:打印楊輝三角
print("----------------------------------------------------") print("楊輝三角打印")def triangles():L = [1]while True:yield LL = [1] + [L[i - 1] + L[i] for i in range(1, len(L))] + [1]n = 0 results = [] for t in triangles():print(t)results.append(t)n = n + 1if n == 10:break

用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 = 1while True:n = n + 2yield n

注意這是一個生成器,并且是一個無限序列。

然后定義一個篩選函數:

def _not_divisible(n):return lambda x: x % n > 0 最后,定義一個生成器,不斷返回下一個素數:def primes():yield 2it = _odd_iter() # 初始序列while True:n = next(it) # 返回序列的第一個數yield nit = filter(_not_divisible(n), it) # 構造新序列

這個生成器先返回第一個素數2,然后,利用filter()不斷產生篩選后的新的序列。

由于primes()也是一個無限序列,所以調用時需要設置一個退出循環的條件:

# 打印1000以內的素數:

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

注意到Iterator是惰性計算的序列,所以我們可以用Python表示“全體自然數”,“全體素數”這樣的序列,而代碼非常簡潔。

特殊函數

  • 傳入函數
def add(x, y, f):return f(x) + f(y)x = -5 y = 6 f = absprint(add(x, y, f))
  • map
def f(x):return x * x r = list(map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]))print(r)

輸出結果

[1, 4, 9, 16, 25, 36, 49, 64, 81]Process finished with exit code 0
  • reduce
from functools import reducedef mul(x, y):return x * y def prod(L):return reduce(mul, [1, 3, 5, 7, 9])print('3 * 5 * 7 * 9 =', prod([3, 5, 7, 9])) if prod([3, 5, 7, 9]) == 945:print('測試成功!') else:print('測試失敗!')
  • 一個應用
    字符串轉整形
print("字符串轉整形") from functools import reduce def fn(x, y):return x * 10 + ydef char2num(s):digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}return digits[s]L = reduce(fn, map(char2num, '13579')) print(isinstance(L,int))

總結

以上是生活随笔為你收集整理的python3字符串处理,高效切片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。