当前位置: 首页 > 面试题库 >

Python:如何将生成器迭代值附加到列表

欧阳勇军
2023-03-14
问题内容

我有一个简单的生成器,可以给我一组坐标的排列。我希望使用以下代码将每个新排列保存到数组中的元素:

import random
def poss_comb(coord):
    spin=random.shuffle
    if spin:
        spin(coord)
        yield (coord)
...

a=[]
for n in xrange(0,10):
    for item in poss_comb(coord):
        print item
        a.append(item)

但是,当打印结果时,打印item给了我我想要的东西:

['0 1', '', '1 2', '1 3']
['0 1', '', '1 2', '1 3']
['1 2', '0 1', '1 3', '']
['0 1', '1 2', '', '1 3']
['1 3', '', '1 2', '0 1']
['1 3', '1 2', '0 1', '']
['0 1', '', '1 3', '1 2']
['1 2', '0 1', '', '1 3']
['1 2', '1 3', '', '0 1']
['', '1 2', '1 3', '0 1']

而打印则list a提供一个数组,其中每个元素都是最后一个排列的副本。

有什么更好的方法可以做到这一点?


问题答案:

您的生成器不会产生 列表,而是会一遍又一遍地产生 相同的列表
。当您将产生的引用附加到a您身上时,只会一遍又一遍地看到相同的原始列表(以最近的混排形式)。

产生副本:

def poss_comb(coord):
    coord = coord[:]  # use a local copy of the list
    random.shuffle(coord)
    yield coord

或创建随机排序,而不是对sorted()函数使用就地改组:

def poss_comb(coord):
    yield sorted(coord, key=lambda k: random.random())


 类似资料:
  • 本文向大家介绍Python迭代器与可迭代与生成器,包括了Python迭代器与可迭代与生成器的使用技巧和注意事项,需要的朋友参考一下 示例 一个迭代是一个对象,可以返回一个迭代器。具有状态且具有__iter__  方法并返回迭代器的任何对象都是可迭代的。也可能是没有状态的对象,该对象实现了__getitem__方法。-该方法可以获取索引(从零开始),并IndexError在索引不再有效时引发。 Py

  • 问题内容: 我试图弄清楚如何在Python中将多个值附加到列表中。我知道很少有方法可以做到这一点,例如手动输入值或将附加操作放入循环中,或和函数。 但是,我想知道是否还有更整齐的方法?也许某个程序包或功能? 问题答案: 您可以使用sequence方法将列表从任意迭代类型中扩展为多个值,无论是另一个列表还是提供值序列的任何其他事物。 因此,您可以用来附加 单个 值,也可以附加 多个 值。

  • 生成器迭代 手动迭代生成器,递归执行 AsyncTask::next,调用Generator::send方法将将yield值作为yield表达式结果。 yield表达式可能是一个异步调用,我们这里为之后把异步调用的结果作为yield表达式结果铺垫。 yield外侧括号在PHP5必须,PHP7不需要。 如, $ip = (yield async_dns_lookup(...) ); ^

  • 问题内容: 我知道在迭代列表时不允许删除元素,但是在迭代时允许将元素添加到python列表中。这是一个例子: 我已经在我的代码中尝试过了,它似乎可以正常工作,但是我不知道是否是因为我很幸运,将来它会折断吗? 编辑:我不愿复制列表,因为“ myarr”很大,因此会太慢。另外,我需要使用“ somecond()”检查附加对象。 编辑:在某些时候“ somecond(a)”将为假,因此不能有无限循环。

  • 本文向大家介绍python生成器与迭代器详解,包括了python生成器与迭代器详解的使用技巧和注意事项,需要的朋友参考一下 列表生成式: 例一: a = [i+1 for i in range(10)] print(a) 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 例二: L = [1, 2, 3, 4, 5] print([i*i for i in L if i>3]

  • 本文向大家介绍python迭代器与生成器详解,包括了python迭代器与生成器详解的使用技巧和注意事项,需要的朋友参考一下 例子 老规矩,先上一个代码: 这个东西输出可以脑补一下, 结果是[20,21,22,23], 而不是[10, 11, 12, 13]。 当时纠结了半天,一直没搞懂,后来齐老师稍微指点了一下, 突然想明白了--真够笨的,唉。。好了--正好趁机会稍微小结一下python里面的生成