从第一个非数字元素中提取所有元素

时间:2012-01-26 12:33:26

标签: python list-comprehension

我想从第一个非数字元素中提取列表的所有元素:

input = [u'12', u'23', u'hello', u'15', u'guys']

我想:

output = [u'hello', u'15', u'guys']

非pythonic版本将是:

input_list = [u'12', u'23', u'hello', u'15', u'guys']

non_numeric_found=False
res = []
for e in input_list:
    if not non_numeric_found and e.isnumeric():
        continue
    non_numeric_found=True
    res.append(e)

有什么建议可以更好地实现这个目标吗?

3 个答案:

答案 0 :(得分:6)

您可以使用itertools.dropwhile

import itertools
input_list = [u'12', u'23', u'hello', u'15', u'guys']
res = list(itertools.dropwhile(lambda s: s.isdigit(), input_list))

答案 1 :(得分:1)

稍微长一点但没有itertools的更明确的版本:

it = iter(input_list)
res = [] # in case the list has no non-numeric elements

for e in it:
    if not e.isnumeric():
        res = [e] + list(it)
        break

答案 2 :(得分:1)

def f(ls):
 if (len(ls) == 0 or not ls[0].isnumeric()):
   return ls
 return f(ls[1:])

input = [u'12', u'23', u'hello', u'15', u'guys']
f(input)
>>> [u'hello', u'15', u'guys']