只取字符串元素中的字母

时间:2015-05-14 22:15:27

标签: python string list numbers

我有一个很长的列表:=

如何只获得没有数字的字母部分并将其作为另一个列表?

5 个答案:

答案 0 :(得分:3)

>>> [''.join([l for l in x if l.isalpha()]) for x in xs]
['ABCd', 'Efhgh', 'dhAsadjkhdk']

答案 1 :(得分:2)

>>> A = ['ABCd 123', 'Efhgh 345', 'dhAsadjkhdk 23']
>>> B = list(map(lambda x: ''.join([letter for letter in x if letter.isalpha()]), A))
>>> B
['ABCd', 'Efhgh', 'dhAsadjkhdk']

filter()map()更好的选择:

>>> A = ['ABCd 123', 'Efhgh 345', 'dhAsadjkhdk 23']
>>> B = [''.join(filter(str.isalpha, a)) for a in A]
>>> B
['ABCd', 'Efhgh', 'dhAsadjkhdk']

当然,这与@ chrisaycock的答案基本相同。

如果您想删除重复的条目,请使用set

>>> A = ['ABCd 123', 'Efhgh 345', 'dhAsadjkhdk 23', 'ABCd 95']
>>> B = set(''.join(filter(str.isalpha, a)) for a in A)
>>> B
{'Efhgh', 'dhAsadjkhdk', 'ABCd'}

如果您想要删除重复的条目,但需要保留原始列表的顺序,请按索引对集合进行排序:

>>> A = ['ABCd 123', 'Efhgh 345', 'dhAsadjkhdk 23', 'ABCd 95']
>>> B = [''.join(filter(str.isalpha, a)) for a in A]
>>> B
['ABCd', 'Efhgh', 'dhAsadjkhdk', 'ABCd']
>>> C = sorted(set(B), key=lambda x: B.index(x))
>>> C
['ABCd', 'Efhgh', 'dhAsadjkhdk']

或通过手动操作来避免使用中间listset

>>> A = ['ABCd 123', 'Efhgh 345', 'dhAsadjkhdk 23', 'ABCd 95']
>>> B = []
>>> for a in A:
...     b = ''.join(filter(str.isalpha, a))
...     if b not in B:
...             B.append(b)
...
>>> B
['ABCd', 'Efhgh', 'dhAsadjkhdk']

答案 2 :(得分:2)

使用re.sub,这非常简单!

>>> strings = ['ABCd 123', 'Efhgh 345', 'dhAsadjkhdk 23']
>>> import re
>>> [re.sub(r'[^A-Za-z]+', '', s) for s in strings]
['ABCd', 'Efhgh', 'dhAsadjkhdk']

还想要数字吗?

>>> [re.sub(r'[^\d]+', '', s) for s in strings]
['123', '345', '23']

答案 3 :(得分:0)

>>> values = ['ABCd 123', 'Efhgh 345', 'dhAsadjkhdk 23']

>>> [value.split()[0] for value in values]
['ABCd', 'Efhgh', 'dhAsadjkhdk']

答案 4 :(得分:0)

使用正则表达式搜索列表中的字母组:

words = map(lambda s: re.findall(r'[a-zA-Z]+', s), A)
words = list(itertools.chain.from_iterable(words))