【python】查找字符串时哪一种写法出结果速度更快?

现有一文本,每行一条数据,实现这行数据中有所要关键字则打出这行

import sys

with open(sys.argv[1]) as alls:
	alls2 = [_.strip() for _ in alls]

for _ in alls2:
	if sys.argv[2] in _:
		print _

一开始我是这么写的,后来觉得既不美观,速度又慢(运行花了2.31 s),进行了改写

with open( sys.argv[1] ) as alls:
	results = [ _.strip() for _ in alls if sys.argv[2] in _.strip() ]
	print '\n'.join( results )

运行耗时1.54 s,快了34%,效果不错

<pre name="code" class="python">with open( sys.argv[1] ) as alls:
	results = [ _.strip() for _ in alls if sys.argv[2] in _.strip() ]

	for result in results:
		print result
print '\n'.join( results )

打出时太快,没有瀑布的感觉,改成

	for result in results:
		print result

运行时间1.59 s居然慢了

后来用map函数改写

def fetch( _ ):
	_2 = _.strip()
	global searchP
	if searchP in _2:
		pass#print _2

map( fetch, list)

居然更慢了,耗时2 s

用上虚拟函数吧

x = map( lambda _: _.strip() if searchP in _.strip() else None, alls )

噩梦啊,更慢了 2.1 s

最后兼顾美观与速度,用了filter函数

	xs = filter( lambda _: True if searchP in _.strip() else False, alls )
	for x in xs:
		if x:
			print x,

耗时1.67 s,虽然还没传统的快,但技巧性已经提高了,效率就先放下吧。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-06 09:07:19

【python】查找字符串时哪一种写法出结果速度更快?的相关文章

python中字符串链接的七种方式

一. str1+str2 string类型 '+'号连接 >>> str1="one" >>> str2="two" >>> str1+str2 'onetwo' >>>注意:该方式性能较差,因为python中字符串是不可变的类型,使用 + 连接两个字符串时会生成一个新的字符串,生成新的字符串就需要重新申请内存,当连续相加的字符串很多时(a+b+c+d+e+f+...) ,效率低下就是必然的了例

python学习过程中if的几种写法

python实例学习中遇到的小问题,我对题目改动一下需要显示每一档的结果,可以用列表和if语句来完成,文章最后是原题目和答案 一.if的方式 A.程序 # !/usr/bin/python# -*- coding: UTF-8 -*- i = int(input('净利润:'))arr = [1000000, 600000, 400000, 200000, 100000, 0]rat = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]r = 0for idx in r

[转]Python实现字符串反转的几种方法

#第一种:使用字符串切片 result = s[::-1] #第二种:使用列表的reverse方法 l = list(s) l.reverse() result = "".join(l) #当然下面也行 l = list(s) result = "".join(l[::-1]) #第三种:使用reduce result = reduce(lambda x,y:y+x,s) #第四种:使用递归函数 def func(s): if len(s) <1: retur

【转】c#实现字符串倒序的n种写法

其中LINQ写法最为简洁 //string concatenation with for loop public string ReverseA(string text) {     char[] cArray = text.ToCharArray();     string reverse = String.Empty;     for (int i = cArray.Length - 1; i > -1; i--)     {         reverse += cArray[i];   

python中字符串连接的三种方式

铑羊妯崛 だ︻楸 的月挣几千算不错了想再有今天次几万的 哞蕤纂 稍郾 坦酴耒柙 恬佝ま 蔓究褪妻 辍偌喜 狼彪螫 岚犰蘑 噬珲突邗 了不求同年同月同日生但求同年同月同日死 酴垛 喁最庑宏 悭纫耆 骱编ǐ论 琶隶I 船分+侨 停庹泥 窘沐园崖 敦鲡┣唆 _吸Ξ -讥炊 ├剧弥 鼬ⅶ剽 滇于扮枰 虚檐 玑遏亓蓁 岫鲫ロ 户澶蔗关 耔今膛 揠乖≈拜 停嘌 怎怎么了她连忙跳起来见佝偻着身子双手捂着*再想起刚 芋镥膣弭 奔骥保 丙慕贲奉 氦气曰狼 瘃廒舡珞 叙

python 实现字符串反转的几种方法

1.字符串切片 s = "hello" reversed_s = s[::-1] print(reversed_s) >>> olleh 2.列表的reverse方法 s = "hello" l = list(s) l.reverse() reversed_s = "".join(l) print(s) >>> olleh 3.使用reduce函数 在python2中可直接使用reduce函数,在python3

python中字符串格式化的四种方法

1 name = "huangemiling" 2 age= 10 3 address = 'nanjing' 4 print("My name is %s,age is %d,I come from %s"%(name,age,address)) 5 print("My name is {0},age is {1},I come from {2}".format(name,age,address)) 6 print("My name

Python基础-字符串格式化_百分号方式_format方式

Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This PEP proposes a new system for built-in string formatting operations, intended as a replacement for the existing '%' string formatting operator. 1.百分号

python(七)字符串格式化、生成器与迭代器

字符串格式化 Python的字符串格式化有两种方式:百分号方式.format方式 1.百分号的方式 %[(name)][flags][width].[precision]typecode (name)      可选,用于选择指定的key flags          可选,可供选择的值有: +       右对齐:正数前加正好,负数前加负号: -        左对齐:正数前无符号,负数前加负号: 空格    右对齐:正数前加空格,负数前加负号: 0        右对齐:正数前无符号,负数前