我已经搜索了有关如何执行此操作的相关主题,但我找不到任何内容。
我有一个数组:
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]
答案 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']