【问题标题】:Selectively appending elements from a list to a new list有选择地将列表中的元素附加到新列表
【发布时间】:2013-07-06 13:17:44
【问题描述】:

使用“序列”一词的松散定义,我有一个包含 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
'''

【问题讨论】:

    标签: list python-2.7 elements next yield


    【解决方案1】:

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

    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']
    ''''
    

    【讨论】:

    • 上述方案能否转化为列表推导式?
    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 2020-09-02
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2021-10-06
    • 2017-04-12
    • 2016-09-17
    相关资源
    最近更新 更多