【问题标题】:How to check if a sequence of INTs are in a list and remove them in Python如何检查 INT 序列是否在列表中并在 Python 中删除它们
【发布时间】:2017-08-02 15:38:22
【问题描述】:

我有一个整数列表,其中每隔一个 int 为零 (0),如下所示:

mylist = [1,0,2,0,3,0,4,0]

我只能像这样检查单个位置:

for i in range(0, len(mylist)):
     if i in mylist:
          #do something here

我试图在每个循环中检查两个位置,因此如果循环在 mylist 中找到例如“2, 0”,它将能够删除这两个整数。

任何建议将不胜感激。

【问题讨论】:

  • 不确定您要检查的确切内容...您可以使用 mylist[::2] 获取所有其他元素吗?你想删除什么?你期待什么输出?
  • 或者for pair in zip(mylist[::2], mylist[1::2])
  • @JonClements 试图删除两个整数,基于我循环中的“i”。例如,我正在搜索“3”,我想同时删除“3”和它旁边的“0”..
  • @CDoc 该列表也可以是[9, 0, 3, 0, 4, 0, 7, 0, 1, 0]吗?例如...这些值与索引无关?
  • @Chris_Rands 不!它们是独一无二的!

标签: python python-2.7 list loops


【解决方案1】:

由于0之间的值是唯一的,您可以简单地使用list.index找到目标值,然后使用del删除这个值和list中的下一个值:

>>> my_list = [1,0,2,0,3,0,4,0]
>>> my_index = my_list.index(3)
>>> del my_list[my_index:my_index+2]
>>> my_list
[1, 0, 2, 0, 4, 0]

【讨论】:

    【解决方案2】:

    如果您想删除序列(2,0),以下是一个示例,请考虑下面提到的 flatten 方法:

    from itertools import izip, chain
    
    >>> list(chain(*[[u,v] for u,v in izip(*[iter(mylist)]*2) if (u,v)!=(2,0)]))
    [1, 0, 3, 0, 4, 0]
    

    所有学分归于:

    Creating a python dictionary from a line of text

    【讨论】:

    • 只需添加一些扁平化,我认为这是最灵活的......
    • @JonClements 灵活,但考虑到除了0s 之外的值是独一无二的,这个问题可能有点矫枉过正? itertools.chain.from_iterable() 也是 Pythonic 的扁平化方式
    • @JonClements - 实际上,问题的主题行建议检查任意值序列(甚至不一定是对)。只要这些检查不重叠,这是一个不错的方法。我会说这有点神秘,尤其是对于 Python 初学者。我认为显式循环不会有什么问题。
    • 不知道这些值是唯一的。 Chris_Rabds 的回答不是 ninja-ic 并且做得很好,尽管没有一个班轮。
    • 嗯。我对编辑有点失望。使用sum() 作为“列表连接器”可以说是滥用该功能。正如@Chris_Rands 所说,这应该使用itertools.chain.from_iterable()(或itertools.chain() 使用* 运算符)来完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 2013-01-09
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2020-10-13
    相关资源
    最近更新 更多