【问题标题】:Selecting List Elements Periodically in Python 3在 Python 3 中定期选择列表元素
【发布时间】:2013-06-24 17:23:34
【问题描述】:

假设我有一个清单

Q = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]

我相信我可以使用扩展切片表示法提取第一个和每第九个值:

Q[::9]

应该给:

[0,9,18]

但是我怎样才能类似地选择所有元素除了那些?

【问题讨论】:

    标签: python list python-3.x element slice


    【解决方案1】:

    你是说这个吗?

    >>> lis = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
    >>> lis[1::9]
    [1, 10]
    

    扩展切片符号:

    lis[start : stop : step]  #default values : start = 0, stop = len(lis), step = 1
    

    您可以将自己的值传递给start(默认使用0)

    更新:

    >>> lis = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
    >>> se = set(range(0, len(lis),9))   #use a list if the lis is not huge.
    >>> [x for i,x in enumerate(lis) if i not in se]
    [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17]
    
    #for your example even this will work:
    >>> [x for i,x in enumerate(lis) if i%9 != 0]
    [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17]
    

    【讨论】:

    • 哎呀,我认为我的问题模棱两可。我的意思是在那个列表中,除了 Q[::9] 返回的值之外,我如何选择所有其他值。
    • 谢谢,这真的很有帮助!
    【解决方案2】:

    如果您没有重复数字,这是任何数字集合(不一定是连续的)的通用解决方案:

    >>> Q = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
    >>> list(set(Q).difference(Q[::9]))
    [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17]
    >>> 
    

    它使用set.differences 来获取set,这是原始列​​表和要删除的子列表之间的差异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 2015-04-09
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 2020-08-01
      相关资源
      最近更新 更多