如何在指定索引之前和之后获取列表中的项目

时间:2016-08-17 20:42:04

标签: python python-2.7 list-comprehension

假设我有列表 private void addListenerOnButton_Back(){ btnBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(PageTwo.this,MainActivity.class); startActivity(i); //onBackPressed();// Less Screen Flash } }); } 和索引f=[1,2,3] - 我想迭代i,不包括f。有没有办法可以使用i拆分列表,例如i,我会在f[:i:][1,3]一起运行时获得i=1的新列表?

代码I试图将其纳入:

# permutations, excluding self addition
# <something here> would be f excluding f[x]
f = [1,2,3]
r = [x + y for x in f for y in <something here>]

# Expected Output (notice absence of any f[i]+f[i])
[3, 4, 3, 5, 4, 5]

4 个答案:

答案 0 :(得分:3)

使用enumerate()以便在迭代时访问索引。

[item for i, item in enumerate(f) if i != 3]

在这种情况下,您可以转义目标索引,或者如果您有一组索引,则可以使用in检查成员资格:

[item for i, item in enumerate(f) if i not in {3, 4, 5}]

如果要删除某个索引中的项目,可以使用del语句:

>>> l = ['a', 'b', 'c', 'd', 'e']
>>> 
>>> del l[3]
>>> l
['a', 'b', 'c', 'e']
>>> 

如果要通过删除该项目来创建新列表并保留主列表,可以使用简单的切片:

>>> new = l[:3] + l[4:]
>>> new
['a', 'b', 'c', 'e']

答案 1 :(得分:0)

在索引上迭代y:

f = [10,20,30,40,50,60]
r = [x + f[y] for x in f for y in range(len(f)) if f[y] != x]

答案 2 :(得分:0)

可能不是最优雅的解决方案,但这可能有效:

f = [1,2,3,4,5]

for i, x in enumerate(f):
    if i == 0:
        new_list = f[1:]
    elif i == len(f) -1:
        new_list = f[:-1]
    else:
        new_list = f[:i]+f[i+1:]
    print i, new_list

打印:

0 [2, 3, 4, 5]
1 [1, 3, 4, 5]
2 [1, 2, 4, 5]
3 [1, 2, 3, 5]
4 [1, 2, 3, 4]

答案 3 :(得分:0)

嗯,这可能看起来很可怕,但这是一个完成工作的单线:

>>> from numpy import array
>>> import itertools
>>> list(itertools.chain(*(i+array(l) for i,l in zip(reversed(f), itertools.combinations(f, len(f)-1)))))
[3, 4, 3, 5, 4, 5]

如果你慢慢看,它不是那么复杂:

  1. itertools.combinationlen(f)-1组合提供了所有可能的选项:

    >>> list(itertools.combinations(f, len(f)-1))
    [(1, 2), (1, 3), (2, 3)]
    
  2. 您使用zipreversed(f)对其进行包装,以便将每个组合与缺失的值结合在一起:

    >>> [(i,l) for i,l in zip(reversed(f), itertools.combinations(f, len(f)-1))]
    [(3, (1, 2)), (2, (1, 3)), (1, (2, 3))]
    
  3. 然后您将l转换为numpy.array,以便添加缺失值:

    >>> list((i+array(l) for i,l in zip(reversed(f), itertools.combinations(f, len(f)-1))))
    [array([4, 5]), array([3, 5]), array([3, 4])]
    
  4. 最后,您使用itertools.chain来获得所需的结果。