Python 列表推导式的实用小技巧

简介: Python 列表推导式的实用小技巧

1. 产生200个1000以内的随机数

>>> L1=[random.randrange(1,1000) for _ in range(200)]
>>> type(L1)
<class 'list'>
>>> for i,L in enumerate(L1):
  if (i+1)%10: print(L,end='\t')
  else: print(L)
842 566 188 863 569 79  91  585 133 866
943 636 359 166 648 615 61  239 144 758
196 61  795 980 255 147 796 158 110 440
51  214 359 85  420 570 725 367 408 368
660 926 465 373 143 440 628 235 261 535
110 422 119 964 9 825 324 556 860 292
911 399 728 877 42  177 947 382 695 225
816 591 458 837 452 627 421 694 5 425
834 374 728 558 831 596 784 548 462 359
219 714 285 883 183 321 514 522 700 628
919 175 776 508 240 94  779 365 12  961
858 835 801 239 359 77  311 930 783 935
248 394 689 959 373 561 252 342 33  712
633 802 236 934 262 358 797 932 432 704
499 962 73  766 21  956 673 690 833 848
758 908 854 811 68  961 640 103 363 693
499 381 377 390 202 187 16  119 441 103
507 77  60  534 342 396 809 411 273 726
619 911 645 21  550 879 587 119 964 956
461 572 993 405 651 71  102 101 640 259
>>> 



2. 在上述列表L1中,找出3的倍数或包含3的数字

>>> L2 = [i for i in L1 if i%3==0 or '3' in str(i)]
>>> type(L2)
<class 'list'>
>>> for i,L in enumerate(L2):
  if (i+1)%10: print(L,end='\t')
  else: print(L)
863 585 133 943 636 359 648 615 239 144
795 255 147 51  359 420 570 367 408 368
660 465 373 143 235 261 535 9 825 324
399 42  177 382 225 816 591 837 627 834
374 558 831 462 359 219 714 285 883 183
321 522 240 365 12  858 835 801 239 359
311 930 783 935 394 373 561 252 342 33
633 236 934 358 932 432 73  21  673 690
833 103 363 693 381 377 390 441 103 507
60  534 342 396 411 273 726 645 21  879
993 405 651 102 
>>> 



3. 把上述列表L2去掉重复数字,并升序输出

>>> L3=[i for i in sorted(set(L2))]
>>> type(L3)
<class 'list'>
>>> for i,L in enumerate(L3):
  if (i+1)%10: print(L,end='\t')
  else: print(L)
9 12  21  33  42  51  60  73  102 103
133 143 144 147 177 183 219 225 235 236
239 240 252 255 261 273 285 311 321 324
342 358 359 363 365 367 368 373 374 377
381 382 390 394 396 399 405 408 411 420
432 441 462 465 507 522 534 535 558 561
570 585 591 615 627 633 636 645 648 651
660 673 690 693 714 726 783 795 801 816
825 831 833 834 835 837 858 863 879 883
930 932 934 935 943 993 
>>>
>>> min(L3),max(L3)
(9, 993)
>>> 




4. 用阿拉伯数字替换中文序号

>>> L4=['第一讲.pdf', '第七讲.pdf', '第三讲.pdf', '第二讲.pdf', '第五讲.pdf', '第六讲.pdf', '第四讲.pdf']
>>> L4
['第一讲.pdf', '第七讲.pdf', '第三讲.pdf', '第二讲.pdf', '第五讲.pdf', '第六讲.pdf', '第四讲.pdf']
>>> L4=[i.replace(i[1],str('一二三四五六七八九'.index(i[1])+1)) for i in L4]
>>> L4
['第1讲.pdf', '第7讲.pdf', '第3讲.pdf', '第2讲.pdf', '第5讲.pdf', '第6讲.pdf', '第4讲.pdf']
>>> 
>>> [i for i in sorted(L4)]
['第1讲.pdf', '第2讲.pdf', '第3讲.pdf', '第4讲.pdf', '第5讲.pdf', '第6讲.pdf', '第7讲.pdf']
>>>
>>> D1={i+1:L for i,L in enumerate(sorted(L4))}
>>> D1
{1: '第1讲.pdf', 2: '第2讲.pdf', 3: '第3讲.pdf', 4: '第4讲.pdf', 5: '第5讲.pdf', 6: '第6讲.pdf', 7: '第7讲.pdf'}
>>> 



5.  遍历指定文件夹下的某一种后缀的文件

>>> import os
>>> docPath='C:\\Users\\Administrator\\Desktop\\查询结果'
>>> [fn[:-5] for fn in [files for path,dirs,files in os.walk(docPath)][0] if fn[-5:]=='.xlsx']
['322986441', '322986442', '322986443', '322986444', '322986445']
>>> 



6. 分离英文单词列表中的中英文

>>> words='''
cat 猫 dog 狗 pig 猪 duck 鸭 rabbit 兔 horse 马 elephant 大象 
ant 蚂蚁 fish 鱼 bird 鸟 eagle 鹰 beaver 海狸 snake 蛇 mouse 老鼠 
squirrel 松鼠 kangaroo 袋鼠 monkey 猴 panda 熊猫 bear 熊 lion 狮子 
tiger 老虎 fox 狐狸 zebra 斑马 deer 鹿 giraffe 长颈鹿 goosr 鹅 
hen 母鸡 turkey 火鸡 lamb 小羊 sheep 绵羊 goat 山羊 cow 奶牛 
donkey 驴 squid 鱿鱼 lobster 龙虾 shark 鲨鱼 seal 海豹
'''
>>> CN=[i for i in words.split() if '\u4e00' <= i <= '\u9fff']
>>> EN=[i for i in words.split() if not '\u4e00' <= i <= '\u9fff']
>>>
>>> CN
['猫', '狗', '猪', '鸭', '兔', '马', '大象', '蚂蚁', '鱼', '鸟', '鹰', '海狸', '蛇', '老鼠', '松鼠', '袋鼠', '猴', '熊猫', '熊', '狮子', '老虎', '狐狸', '斑马', '鹿', '长颈鹿', '鹅', '母鸡', '火鸡', '小羊', '绵羊', '山羊', '奶牛', '驴', '鱿鱼', '龙虾', '鲨鱼', '海豹']
>>> EN
['cat', 'dog', 'pig', 'duck', 'rabbit', 'horse', 'elephant', 'ant', 'fish', 'bird', 'eagle', 'beaver', 'snake', 'mouse', 'squirrel', 'kangaroo', 'monkey', 'panda', 'bear', 'lion', 'tiger', 'fox', 'zebra', 'deer', 'giraffe', 'goosr', 'hen', 'turkey', 'lamb', 'sheep', 'goat', 'cow', 'donkey', 'squid', 'lobster', 'shark', 'seal']
>>> 


7. 把上述EN列表中单词分成单元音、双元音和多元音三类

>>> EN1=[i for i in EN if i.count('a')+i.count('e')+i.count('i')+i.count('o')+i.count('u')==1]
>>> EN2=[i for i in EN if i.count('a')+i.count('e')+i.count('i')+i.count('o')+i.count('u')==2]
>>> EN3=[i for i in EN if i.count('a')+i.count('e')+i.count('i')+i.count('o')+i.count('u')>2]
>>>
>>> EN1
['cat', 'dog', 'pig', 'duck', 'ant', 'fish', 'bird', 'fox', 'hen', 'lamb', 'cow', 'shark']
>>> EN2
['rabbit', 'horse', 'snake', 'monkey', 'panda', 'bear', 'lion', 'tiger', 'zebra', 'deer', 'goosr', 'turkey', 'sheep', 'goat', 'donkey', 'squid', 'lobster', 'seal']
>>> EN3
['elephant', 'eagle', 'beaver', 'mouse', 'squirrel', 'kangaroo', 'giraffe']
>>> 



8. 找出单词(包含2个或2个以上字母e)的中文意思

方法一:

>>> CN1 = [[EN,CN][1][[EN,CN][0].index(i)] for i in [EN,CN][0] if i.count('e') > 1]
>>> CN1
['大象', '鹰', '海狸', '鹿', '绵羊']


方法二:

1. >>> CN2 = [i.split(' ')[1] for i in [' '.join(i) for i in zip(EN, CN)] if i.count('e') > 1]
2. >>> CN2
3. ['大象', '鹰', '海狸', '鹿', '绵羊']
4. >>>



两者的区别在于:

>>> [EN,CN]
[['cat', 'dog', 'pig', 'duck', 'rabbit', 'horse', 'elephant', 'ant', 'fish', 'bird', 'eagle', 'beaver', 'snake', 'mouse', 'squirrel', 'kangaroo', 'monkey', 'panda', 'bear', 'lion', 'tiger', 'fox', 'zebra', 'deer', 'giraffe', 'goosr', 'hen', 'turkey', 'lamb', 'sheep', 'goat', 'cow', 'donkey', 'squid', 'lobster', 'shark', 'seal'], ['猫', '狗', '猪', '鸭', '兔', '马', '大象', '蚂蚁', '鱼', '鸟', '鹰', '海狸', '蛇', '老鼠', '松鼠', '袋鼠', '猴', '熊猫', '熊', '狮子', '老虎', '狐狸', '斑马', '鹿', '长颈鹿', '鹅', '母鸡', '火鸡', '小羊', '绵羊', '山羊', '奶牛', '驴', '鱿鱼', '龙虾', '鲨鱼', '海豹']]
>>> zip(EN,CN)
<zip object at 0x02E384E8>
>>> list(zip(EN,CN))
[('cat', '猫'), ('dog', '狗'), ('pig', '猪'), ('duck', '鸭'), ('rabbit', '兔'), ('horse', '马'), ('elephant', '大象'), ('ant', '蚂蚁'), ('fish', '鱼'), ('bird', '鸟'), ('eagle', '鹰'), ('beaver', '海狸'), ('snake', '蛇'), ('mouse', '老鼠'), ('squirrel', '松鼠'), ('kangaroo', '袋鼠'), ('monkey', '猴'), ('panda', '熊猫'), ('bear', '熊'), ('lion', '狮子'), ('tiger', '老虎'), ('fox', '狐狸'), ('zebra', '斑马'), ('deer', '鹿'), ('giraffe', '长颈鹿'), ('goosr', '鹅'), ('hen', '母鸡'), ('turkey', '火鸡'), ('lamb', '小羊'), ('sheep', '绵羊'), ('goat', '山羊'), ('cow', '奶牛'), ('donkey', '驴'), ('squid', '鱿鱼'), ('lobster', '龙虾'), ('shark', '鲨鱼'), ('seal', '海豹')]
>>> 



注:方法二中推导式嵌套,内外层的变量 i 互不干涉(要求版本python3+)。

方法三:先用字典推导式建一个字典,再从字典里遍历出结果

>>> dic={e:CN[i] for i,e in enumerate(EN)}
>>> [cn for en,cn in dic.items() if en.count('e')>1]
['大象', '鹰', '海狸', '鹿', '绵羊']
>>> #合并成一行:
>>> [cn for en,cn in {e:CN[i] for i,e in enumerate(EN)}.items() if en.count('e')>1]
['大象', '鹰', '海狸', '鹿', '绵羊']
>>> 
>>> #或者:
>>> [dic[i] for i in dic.keys() if i.count('e')>1]
['大象', '鹰', '海狸', '鹿', '绵羊']
>>> [dic.get(i) for i in dic.keys() if i.count('e')>1]
['大象', '鹰', '海狸', '鹿', '绵羊']
>>> #合并成一行:
>>> [{e:CN[i] for i,e in enumerate(EN)}[i] for i in {e:CN[i] for i,e in enumerate(EN)}.keys() if i.count('e')>1]
['大象', '鹰', '海狸', '鹿', '绵羊']
>>> 
>>> #字典的值:
>>> dic
{'cat': '猫', 'dog': '狗', 'pig': '猪', 'duck': '鸭', 'rabbit': '兔', 'horse': '马', 'elephant': '大象', 'ant': '蚂蚁', 'fish': '鱼', 'bird': '鸟', 'eagle': '鹰', 'beaver': '海狸', 'snake': '蛇', 'mouse': '老鼠', 'squirrel': '松鼠', 'kangaroo': '袋鼠', 'monkey': '猴', 'panda': '熊猫', 'bear': '熊', 'lion': '狮子', 'tiger': '老虎', 'fox': '狐狸', 'zebra': '斑马', 'deer': '鹿', 'giraffe': '长颈鹿', 'goosr': '鹅', 'hen': '母鸡', 'turkey': '火鸡', 'lamb': '小羊', 'sheep': '绵羊', 'goat': '山羊', 'cow': '奶牛', 'donkey': '驴', 'squid': '鱿鱼', 'lobster': '龙虾', 'shark': '鲨鱼', 'seal': '海豹'}


9. 单循环赛对阵表,场数=队数*(队数-1)/2

>>> teams=[chr(i+65) for i in range(6)]
>>> games=[i+'-'+j for i in teams for j in teams if i<j]
>>> teams
['A', 'B', 'C', 'D', 'E', 'F']
>>> games
['A-B', 'A-C', 'A-D', 'A-E', 'A-F', 'B-C', 'B-D', 'B-E', 'B-F', 'C-D', 'C-E', 'C-F', 'D-E', 'D-F', 'E-F']
>>> len(games)
15
>>> 



10. 一行代码找出字符串s中包含多个字母e的单词的中文意思


>>> s='''

cat 猫 dog 狗 pig 猪 duck 鸭 rabbit 兔 horse 马 elephant 大象

ant 蚂蚁 fish 鱼 bird 鸟 eagle 鹰 beaver 海狸 snake 蛇 mouse 老鼠

squirrel 松鼠 kangaroo 袋鼠 monkey 猴 panda 熊猫 bear 熊 lion 狮子

tiger 老虎 fox 狐狸 zebra 斑马 deer 鹿 giraffe 长颈鹿 goosr 鹅

hen 母鸡 turkey 火鸡 lamb 小羊 sheep 绵羊 goat 山羊 cow 奶牛

donkey 驴 squid 鱿鱼 lobster 龙虾 shark 鲨鱼 seal 海豹

'''


>>> [c for e,c in {e:[c for c in s.split() if '\u4e00'<=c<='\u9fff'][c] for c,e in enumerate([c for c in s.split() if not '\u4e00'<=c<='\u9fff'])}.items() if e.count('e')>1]
['大象', '鹰', '海狸', '鹿', '绵羊']
>>> 



目录
相关文章
|
17天前
|
索引 Python
Python列表
Python列表。
42 8
|
19天前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
30 9
|
27天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
56 14
|
29天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
43 10
|
2月前
|
数据处理 开发者 Python
Python中的列表推导式:简洁高效的数据处理
在编程世界中,效率和可读性是代码的两大支柱。Python语言以其独特的简洁性和强大的表达力,为开发者提供了众多优雅的解决方案,其中列表推导式便是一个闪耀的例子。本文将深入探讨列表推导式的使用场景、语法结构及其背后的执行逻辑,带你领略这一特性的魅力所在。
|
2月前
|
开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第41天】 在编程的世界中,效率与简洁是永恒的追求。本文将深入探讨Python编程语言中一个独特且强大的特性——列表推导式(List Comprehension)。我们将通过实际代码示例,展示如何利用这一工具简化代码、提升性能,并解决常见编程问题。无论你是初学者还是资深开发者,掌握列表推导式都将使你的Python之旅更加顺畅。
|
2月前
|
Python
探索Python中的列表推导式
【10月更文挑战第38天】本文深入探讨了Python中强大而简洁的编程工具——列表推导式。从基础使用到高级技巧,我们将一步步揭示如何利用这个特性来简化代码、提高效率。你将了解到,列表推导式不仅仅是编码的快捷方式,它还能帮助我们以更加Pythonic的方式思考问题。准备好让你的Python代码变得更加优雅和高效了吗?让我们开始吧!
|
2月前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
23 1
|
2月前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
45 2
|
2月前
|
JavaScript 前端开发 算法
python中的列表生成式和生成器
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生的天地。通过自学前端技术2年半,现正向全栈开发迈进。如果你从我的文章中受益,欢迎关注,我将持续更新高质量内容,你的支持是我前进的动力!🎉🎉🎉
34 0