哪个方法更适合于数组去除?

2024-09-30 12:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从数组中移除一个项(如果它存在)。在

我可以想出两种方法

1路

# x array, r item to remove
if r in x :
  x.remove( r )

2路

^{pr2}$

计时显示try/except方式可以使更快

(有时我会得到:)

1.16225508968e-06
8.80804972547e-07

1.14314196588e-06
8.73752536492e-07
import timeit

runs = 10000
x = [ '101', '102', '103', '104', '105', 'a', 'b', 'c',
  'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', '111', '112', '113',
  'x', 'y', 'z', 'w', 'wwwwwww', 'aeiojwaef', 'iweojfoigj', 'oiowow',
  'oiweoiwioeiowe', 'oiwjaoigjoaigjaowig',
]
r = 'a'

code1 ="""
x = [ '101', '102', '103', '104', '105', 'a', 'b', 'c',
  'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', '111', '112', '113',
  'x', 'y', 'z', 'w', 'wwwwwww', 'aeiojwaef', 'iweojfoigj', 'oiowow',
  'oiweoiwioeiowe', 'oiwjaoigjoaigjaowig',
]
r = 'a'

if r in x :
  x.remove(r)
"""
print timeit.Timer( code1 ).timeit( runs ) / runs

code2 ="""
x = [ '101', '102', '103', '104', '105', 'a', 'b', 'c',
  'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', '111', '112', '113',
  'x', 'y', 'z', 'w', 'wwwwwww', 'aeiojwaef', 'iweojfoigj', 'oiowow',
  'oiweoiwioeiowe', 'oiwjaoigjoaigjaowig',
]
r = 'a'

try :
  x.remove( r )
except :
  pass
"""
print timeit.Timer( code2 ).timeit( runs ) / runs

哪个更像Python?在


Tags: inifrunsremoveprinttryexcepttimeit
3条回答

我总是采用第一种方法。if in读起来比异常处理清楚得多。在

速度取决于命中与未命中的比率。要想成为Python,选择更清晰的方法。在

就我个人而言,我认为方法1更清晰(使用“如果”块而不是异常块所需的行数更少,而且使用的大脑空间也更少)。当命中多于未命中时,它也会更快(异常比跳过if块代价更高)。在

这将是:

try:
  x.remove(r)
except ValueError:
  pass

顺便说一句,你应该试着删除不在列表中的项目,以便进行全面的比较。在

相关问题 更多 >

    热门问题