在 Python 中复制列表的一部分
Posted
技术标签:
【中文标题】在 Python 中复制列表的一部分【英文标题】:Copying part of a list in Python 【发布时间】:2016-12-11 21:44:18 【问题描述】:我已经搜索了有关如何执行此操作的相关主题,但找不到任何内容。
我有一个数组:
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]
【问题讨论】:
x[ii].find(num)
是什么意思?你有一个整数或字符串列表?
对不起,我以整数为例,它是一个字符串数组。固定。
【参考方案1】:
y = []
for e in x:
if e == 2:
break
y.append(e)
?
【讨论】:
也称为y = x[:x.index(2)]
。
梅菲:对。只是觉得作者需要一些简单的实现。
@IgorPomaranskiy 除了实现,一些解释也不错,【参考方案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】:你可以使用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
的有效元素,但这不是您所期望的。
【讨论】:
【参考方案4】:使用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']
【讨论】:
哇,在列表理解中使用next(iter([]))
触发StopIteration
。我不确定我是否应该对此表示赞成,但肯定是一个创造性的解决方案。 ;-)
@tobias_k 谢谢,你的评论比点赞更好)))
顺便说一句,实际上,这是一个生成器表达式,而不是列表推导式。使用适当的列表理解,这是行不通的。
酷而有创意.. +1【参考方案5】:
虽然它在某种程度上类似于 Will 的答案,但在这里它显示了 slice
内置切片对象的使用:
>>> x = ['a','a','a','b','a','a']
>>> s = slice(x.index('b'))
>>>
>>> x[s]
['a', 'a', 'a']
【讨论】:
你也可以用这个方法来处理'dict'类型的对象吗? 你的意思是 dict 列表?【参考方案6】:我会按b
索引拆分数组:
>>> x = ['a','a','a','b','a','a']
>>> c = x.index('b')
>>> x[:c]
['a', 'a', 'a']
>>> x[c:]
['b', 'a', 'a']
【讨论】:
虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,因为这会降低代码和解释的可读性!以上是关于在 Python 中复制列表的一部分的主要内容,如果未能解决你的问题,请参考以下文章