在Python中复制列表的一部分

时间:2016-08-05 12:58:12

标签: python arrays list for-loop

我已经搜索了有关如何执行此操作的相关主题,但我找不到任何内容。

我有一个数组:

x = [a,a,a,b,a,a]

我想将数组的元素复制到一个新数组中,直到找到'b'。我尝试用循环执行此操作但是我收到“y未定义”的错误,我尝试初始化y但是这也不起作用。有任何想法吗?我确信有更好的方法可以做到这一点。

for ii in x:
    if x[ii].find(num) == 0:
        break
    else:
        y[ii] = x[ii]

6 个答案:

答案 0 :(得分:2)

y = []
for e in x:
    if e == 2:
        break
    y.append(e)

答案 1 :(得分:2)

您可以使用itertools.takewhile

>>> x = [1,1,1,2,1,1]
>>> import itertools
>>> y = list(itertools.takewhile(lambda i: i != 2, x))
>>> y
[1, 1, 1]

使用循环时,必须使用y.append;如果您执行了y[ii] = ...,那么当您尝试设置时,您将获得IndexError数组中第一个元素为零的元素。此外,当您按此for ii in x:循环时,ii已经是来自x的元素,即您必须执行x[ii]。在您的情况下,这不会给出例外,因为x[1]将是x的有效元素,但它不会是您所期望的。

答案 2 :(得分:2)

试试这个:

x = [1,1,1,2,1,1]
b = 2

try:
    y = x[:x.index(b)]
except ValueError:
    y = x[:]

例如:

In [10]: x = [1,1,1,2,1,1]
    ...: b = 2
    ...: 
    ...: try:
    ...:     y = x[:x.index(b)]
    ...: except ValueError:
    ...:     # b was not found in x. Just copy the whole thing.
    ...:     y = x[:]
    ...:

In [11]: y
Out[11]: [1, 1, 1]

有关详细信息,请参阅list.index()shallow-copy slice

答案 3 :(得分:1)

使用generator expression完成工作的方法:

x = ['a', 'a', 'a', 'b', 'a', 'a']
items = list(next(iter([])) if item == 'b' else item for item in x)
print items
['a', 'a', 'a']

答案 4 :(得分:0)

虽然它在某种程度上类似于Will的答案,但在这里它显示了使用slice内置切片对象:

>>> x = ['a','a','a','b','a','a']
>>> s = slice(x.index('b'))
>>> 
>>> x[s]
['a', 'a', 'a']

答案 5 :(得分:0)

我会按b索引分割数组:

>>> x = ['a','a','a','b','a','a']
>>> c = x.index('b')
>>> x[:c]
['a', 'a', 'a']
>>> x[c:]
['b', 'a', 'a']