1. 程式人生 > >python 列表生成器 獲取檔案列表

python 列表生成器 獲取檔案列表

  g = os.walk(list_path)

            # b=[ j for j in g]

            self.img_files = ['%s\\%s' % (i[0], j) for i in g if i[0].endswith('JPEGImages') for j in i[-1] if j.endswith('jpg')]

 

列表表示式

程式一:

常規寫法:

1

2

3

4

5

egg_list=[]

 

for in range(100):

    egg_list.append('egg%s' %i)

print(egg_list)

列表表示式寫法:

1

2

l=['egg%s' %for in range(100if i > 0]  #列表寫法:[命令+迴圈語句]。'egg%s' %i 這句話在列表中,所以不用append命令寫入列表中

print(l)

 

程式二:

常規寫法:

1

2

3

4

5

6

7

8

l=[1,2,3,4]

s='hello'

l1=[]

for num in l:

    for s1 in s:

        t=(num,s1)

        l1.append(t)

print(l1)

列表表示式寫法:

1

2

l1=[(num,s1) for num in if num > 0 for s1 in s]  #if num >0 這句判斷可以去掉

print(l1)

 

程式三:

常規寫法:

1

2

3

4

5

6

7

8

9

import os<br>#檢視xuyaping資料夾所有的絕對路徑

g=os.walk('F:\\xuyaping')

file_path_list=[]

for in g:

    # print(i)

    for in i[-1]:

        file_path_list.append('%s\\%s' %(i[0],j))

 

print(file_path_list)

列表表示式寫法:

1

2

3

g=os.walk('F:\\xuyaping')

l1=['%s\\%s' %(i[0],j) for in for in i[-1]]

print(l1)

 

 

生成器表示式

相比列表表示式,只不過將[]換成了(),更加省記憶體。

程式一:

列表表示式寫法:

1

2

l=['egg%s' %for in range(10000)]

print(l)

生成器表示式寫法:

1

2

3

4

5

6

g=l=('egg%s' %for in range(10000))

print(g)

print(next(g))

print(next(g))

for in g:

    print(i)

 

程式二:

常規寫法:

1

2

3

4

5

6

f=open('a.txt')

l=[]<br>f.seek(0)   #游標移動到文件首行首位

for line in f:

    line=line.strip()

    l.append(line)

print(l)

列表表示式寫法:

1

2

3

4

f=open('a.txt')

f.seek(0)

l1=[line.strip() for line in f]

print(l1)

生成器表示式寫法:

1

2

3

4

5

f=open('a.txt')

f.seek(0)

g=(line.strip() for line in f)

print(g)

print(next(g))

  

程式三:

生成器表示式寫法:

1

2

3

4

f=open('a.txt')

g=(line.strip() for line in f)  #g為迭代器

 

l=list(g)   #list(可迭代物件),迭代取出g中的所有內容 <br>print(l)

1

2

3

4

5

6

7

<em>---->['asdfasdfasdfasdfasdf''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123''123123123123', '', 'asdfasdfasdfasdf']

 

 

nums_g=(i for in range(3))

 

# print(sum([1,2,3,4]))

print(sum(nums_g))   #sum(可迭代物件),</em>迭代將g中的所有元素相加

 a.txt

 

程式四:

常規方法:

1

2

3

4

5

6

7

money_l=[]

with open('b.txt') as f:

    for line in f:

        goods=line.split()

        res=float(goods[-1])*float(goods[-2])

        money_l.append(res)

print(money_l)<br>---->[30.01000000.06000.090000.030.0]

生成器表示式寫法:

1

2

3

4

f=open('b.txt')

g=(float(line.split()[-1])*float(line.split()[-2]) for line in f)

 

print(sum(g))<br>---->1096060.0

程式五:

1

2

3

4

5

6

7

8

9

10

11

12

13

res=[]

with open('b.txt') as f:

    for line in f:

        # print(line)

        l=line.split()

        # print(l)

        d={}

        d['name']=l[0]

        d['price']=l[1]

        d['count']=l[2]

        res.append(d)

 

print(res)<br>---->[{'name''apple''price''10''count''3'}, {'name''tesla''price''1000000''count''1'}, {'name''mac''price''3000''count''2'}, {'name''lenovo''price''30000''count''3'}, {'name''chicken''price''10''count''3'}]

生成器表示式寫法:

1

2

3

4

5

6

7

8

9

10

11

with open('b.txt') as f:

    res=(line.split() for line in f)

    print(res)

    dic_g=({'name':i[0],'price':i[1],'count':i[2]} for in res)

    print(dic_g)

    apple_dic=next(dic_g)

    print(apple_dic['count'])

 

 

  apple_dict=next(dic_g)

  print(apple_dict)<br>---->{'name''tesla''price''1000000''count''1'}

 b.txt

 

1

2

3

4

5

6

7

#取出單價>10000

with open('b.txt') as f:

    res=(line.split() for line in f)

    # print(res)

    dic_g=({'name':i[0],'price':i[1],'count':i[2]} for in res if float(i[1]) > 10000)

    print(dic_g)<br>----> <generator object <genexpr> at 0x0000000001E05888>

    print(list(dic_g))<br>----> [{'name''tesla''price''1000000''count''1'}, {'name''lenovo''price''30000''count''3'}]