有选择地将列表中的元素附加到新列表中

时间:2013-07-09 04:00:34

标签: list python-2.7 elements next yield

使用单词'sequence'的松散定义我有一个包含超过2,000个元素(序列号)的列表,对于每个短序列,我想将最高的数字附加到单独的列表中。以下是我的数据的代表性和简化示例:

# seqNums = ['01', '02', '01', '02', '03', '01', '01', '02', '03', '04', '01', '02', '03', '01', '02', '03', '04', '05']

在这个例子中,我想将元素1,4,5,9,12和17附加到一个新列表,看起来像下面的'newSeqNums'。

# newSeqNums = ['02', '03', '01', '04', '03', '05']

我尝试了很多不同的东西,下面的代码就是我可以在列表中提前阅读的壁橱,但它不起作用。有什么建议吗?

seqNums = ['01', '02', '01', '02', '03', '01', '01', '02', '03', '04', '01', '02', '03', '01', '02', '03', '04', '05']
newSeqNums = []
def readAhead(seqNums):
    for item in seqNums:
        yield item
    yield None

items = readAhead(seqNums)
item = items.next()          # get first item

while item:
    nextItem = items.next()  # get next item
    if item < nextItem:
        pass
    else:
        newSeqNums.append(nextItem)
    item = items.next()

print newSeqNums
print len(newSeqNums)

'''
# output for above code
['01', '01']
2
'''

1 个答案:

答案 0 :(得分:0)

我不知道为什么我这么困难但是像往常一样(至少就我而言)解决方案比我想象的要简单,我倾向于过度思考问题。所以无论如何,下面的代码给了我想要的解决方案。

seqNums = ['01', '02', '01', '02', '03', '01', '01', '02', '03', '04', '01', '02', '03', '01', '02', '03', '04', '05']
newSeqNums = []
for i in range(len(seqNums)):
    if seqNums[i] == seqNums[-1]:
        newSeqNums.append(seqNums[-1])
    elif seqNums[i] < seqNums[i + 1]:
        pass
    else:
        newSeqNums.append(seqNums[i])
print newSeqNums


'''
# output for above code
['02', '03', '01', '04', '03', '05']
''''