Pythonリスト導出ジェネレータ式
リスト導出式
ループの後で判断することもできます.これにより、簡単なデータフィルタリングができます.次のプレゼンテーションを見てください.
100以内の偶数と、100以内のすべての3で割り切れる、しかも個位が2の数を求めるには、同じタイプのものがたくさんあります.
リスト内の値を乗算することもできます.たとえば、べき乗演算を行います.
1つの数のすべての因子を求めることは、1つの数が完数であるか否かを判断するのに役立ち、n+1をnに置き換えるだけでよいので、和を求めて比較する(完数とは、その数が自身以外の因子の和にちょうど等しいことである.例えば、6=1+2+3)
類推する
リスト導出式がありますが、メタグループ、辞書、集合導出式はありますか?これは私たちが考えるべきことです.じゃ、今からやってみましょう.包装を変えただけです.
()で包むのは実は1つのジェネレータ式で、Pythonの中でyieldの関数を使ってジェネレータと呼ばれて、普通の関数と異なって、ジェネレータは1つの反復器を返す関数で、反復操作にしか使えなくて、もっと簡単にジェネレータが1つの反復器であることを理解します
ジェネレータ式が単独のパラメータとして関数に渡される場合の外側de()は、ジェネレータ式をパラメータとして省略することができ、一時リストを作成するよりも効率的です.
見てみましょう
何の役にも立たないような気がして、辞書を1つ反転するだけでもう1つの役に立つ.
リスト導出式とジェネレータ式に重点を置く必要があります
やれやれ
またみんなにほめてもらう時が来た
ワンクリック三連Oも可能です
QAQ
#
# for
a = [m for m in range(31)]
print(a)# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
b = [a[m:m + 3] for m in range(0, 31, 3)]# a a
print(b)# [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19, 20], [21, 22, 23], [24, 25, 26], [27, 28, 29], [30]]
c = [(a, b) for a in range(0, 2) for b in range(3, 5)]
print(c)# [(0, 3), (0, 4), (1, 3), (1, 4)]
i = [[1, 4, 7],
[2, 5, 8],
[3, 6, 9]]
d = [row[1] for row in i]
print(d) # [4, 5, 6]
e = [i[j][j] for j in range(len(i))]
print(e) # [1, 5, 9]
f = [i[j][2-j] for j in range(len(i))]
print(f)# [7, 5, 3]
ループの後で判断することもできます.これにより、簡単なデータフィルタリングができます.次のプレゼンテーションを見てください.
num3 = [1,-1,2,-2,-10,3,4]
print([x for x in num3 if x > 0])# [1, 2, 3, 4]
100以内の偶数と、100以内のすべての3で割り切れる、しかも個位が2の数を求めるには、同じタイプのものがたくさんあります.
num1 = [x for x in range(101) if x % 2 == 0]#
print(sum(num1))# 2550
print([i for i in range(101) if i % 3 == 0 and i % 10 == 2])# [12, 42, 72]
リスト内の値を乗算することもできます.たとえば、べき乗演算を行います.
print([i ** 2 for i in range(5)])# [0, 1, 4, 9, 16]
1つの数のすべての因子を求めることは、1つの数が完数であるか否かを判断するのに役立ち、n+1をnに置き換えるだけでよいので、和を求めて比較する(完数とは、その数が自身以外の因子の和にちょうど等しいことである.例えば、6=1+2+3)
n = 6
print([i for i in range(1,n+1) if n % i == 0])# [1, 2, 3, 6]
類推する
リスト導出式がありますが、メタグループ、辞書、集合導出式はありますか?これは私たちが考えるべきことです.じゃ、今からやってみましょう.包装を変えただけです.
num = (i for i in range(5))
print(num) # at 0x09AEEE30>
print(type(num))#
#
#
# , next()
# , ,
# ,
#
for i in num :
print(i)
# 0
# 1
# 2
# 3
# 4
print(list(num))# []
# print(next(num))# 0
# print(next(num))# 1
# print(next(num))# 2
# print(next(num))# 3
# print(next(num))# 4
# print(list(num))# []
()で包むのは実は1つのジェネレータ式で、Pythonの中でyieldの関数を使ってジェネレータと呼ばれて、普通の関数と異なって、ジェネレータは1つの反復器を返す関数で、反復操作にしか使えなくて、もっと簡単にジェネレータが1つの反復器であることを理解します
# n
def feibo(n):
a,b = 0,1
for i in range(n):
a,b = b ,a+b
yield a
print(feibo(10))#
print(list(feibo(10)))# [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
ジェネレータ式が単独のパラメータとして関数に渡される場合の外側de()は、ジェネレータ式をパラメータとして省略することができ、一時リストを作成するよりも効率的です.
s1 = sum((x for x in range(101))) #
s2 = sum(x for x in range(101)) # ,
print(s1)# 5050
print(s2)# 5050
# min()、max()
person = [
{
'name':'zhangsan','age':20},
{
'name':'lisi','age':18},
{
'name':'wangwu','age':16},
{
'name':'maliu','age':17},
]
print(min(p['age'] for p in person))# 16
print(min(person,key=lambda p:p['age']))# {'name': 'wangwu', 'age': 16}
見てみましょう
a = {
x for x in range(10)}
print(a)# {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
print(type(a))#
student = {
'name':'zhangsan','age':18
}
b = {
x:y for y,x in student.items()}
print(b)# {'zhangsan': 'name', 18: 'age'}
print(type(b))#
何の役にも立たないような気がして、辞書を1つ反転するだけでもう1つの役に立つ.
リスト導出式とジェネレータ式に重点を置く必要があります
やれやれ
またみんなにほめてもらう時が来た
ワンクリック三連Oも可能です
QAQ