假设我有列表 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]
答案 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]
如果你慢慢看,它不是那么复杂:
itertools.combination
为len(f)-1
组合提供了所有可能的选项:
>>> list(itertools.combinations(f, len(f)-1))
[(1, 2), (1, 3), (2, 3)]
您使用zip
和reversed(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))]
然后您将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])]
最后,您使用itertools.chain
来获得所需的结果。