在 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 中复制列表的一部分的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中将数字列表拆分为电话号码? [复制]

在 python 中,为啥列表与列表 [:] 不同? [复制]

在 Python 中复制嵌套列表

在python中复制列表[重复]

在python中复制列表[重复]

如何在 python 中合并列表? [复制]