2

我的代码给了我作为列表的输出

def extractKeywords():
    <code> 
    return list

list = []
data = extractKeywords()
for x in range(0,5):
    get = data[0][x]
    list.append(get)
print list12

输出列表是

['LION', 'tv', 'TIGER', 'keyboard', 'cd-writer','ELEPHANT']

我如何将此列表分为两组,例如(预期输出)

Animals = ['LION', 'TIGER', 'ELEPHANT']
Electronics = ['tv', 'keyboard', 'cd-writer']

所有动物都在Capital letter,电子设备在small letters

4

3 回答 3

2

此解决方案使用 itertools.groupby 来避免遍历列表两次。

>>> from itertools import groupby
>>> data = ['LION', 'tv', 'TIGER', 'keyboard', 'cd-writer','ELEPHANT']
>>> # upper case letters have lower `ord` values than lower case letters
>>> sort_by_case = sorted(data, key=lambda word: ord(word[0]))
>>> sort_by_case
['ELEPHANT', 'LION', 'TIGER', 'cd-writer', 'keyboard', 'tv']
>>> # group the words according to whether their first letter is upper case or not
>>> group_by_case = groupby(sort_by_case, lambda word: word[0].isupper())
>>> # use tuple unpacking to assign the two groups to appropriate variables
>>> upper_case, lower_case = [list(g) for (k, g) in group_by_case]
>>> upper_case
['ELEPHANT', 'LION', 'TIGER']
>>> lower_case
['cd-writer', 'keyboard', 'tv']
于 2013-10-24T10:58:00.120 回答
1

这是一种可能的解决方案

>>> from itertools import tee
>>>
>>> def splitOnCondition(lst, condition):
...   l1, l2 = tee((condition(i), i) for  i in lst)
...   return [i for c, i in l1 if c], [i for c, i in l2 if not c]
...
>>> splitOnCondition(['LION', 'tv', 'TIGER', 'keyboard',
...    'cd-writer','ELEPHANT'], lambda x: x==x.lower())
(['tv', 'keyboard', 'cd-writer'], ['LION', 'TIGER', 'ELEPHANT'])
于 2013-10-24T07:41:13.930 回答
1
mylist = ['LION', 'tv', 'TIGER', 'keyboard', 'cd-writer','ELEPHANT']
[word for word in mylist if word==word.lower()]
于 2013-10-24T07:37:54.960 回答