【问题标题】:Copying part of a list in Python在 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) 是什么意思?你有一个整数或字符串列表?
  • 对不起,我以整数为例,它是一个字符串数组。固定。

标签: python arrays list for-loop


【解决方案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 挤满你的代码,因为这会降低代码和解释的可读性!
      猜你喜欢
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2023-03-09
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多