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

函数调用中的星号

司空宣
2023-03-14
问题内容

我正在使用itertools.chain以这种方式“拉平”列表列表:

uniqueCrossTabs = list(itertools.chain(*uniqueCrossTabs))

这跟说的有什么不同?

uniqueCrossTabs = list(itertools.chain(uniqueCrossTabs))

问题答案:

* 是“ splat”运算符:它接受一个列表作为输入,并将其扩展为函数调用中的实际位置参数。

所以如果uniqueCrossTabs[ [ 1, 2 ], [ 3, 4 ] ],那就itertools.chain(*uniqueCrossTabs)等于说itertools.chain([ 1, 2 ], [ 3, 4 ])

这与传递just显然不同uniqueCrossTabs。对于您的情况,您有一个想要拼合的列表列表;什么itertools.chain()确实是在所有你传递给它的位置参数,其中每个位置参数是在自己的权利迭代拼接返回一个迭代。

换句话说,您希望将每个列表uniqueCrossTabs作为参数传递给chain(),这会将它们链接在一起,但是您没有在单独的变量中使用列表,因此您可以使用*运算符将列表列表扩展为多个列表参数。

正如Jochen
Ritzel在评论中指出的那样,chain.from_iterable()它更适合于此操作,因为它假定一个可迭代的对象开始。然后,您的代码将变得简单:

uniqueCrossTabs = list(itertools.chain.from_iterable(uniqueCrossTabs))


 类似资料:
  • 问题内容: 我正在使用以这种方式“拉平”列表列表: 这跟说的有什么不同? 问题答案: 是“ splat”运算符:它接受一个列表作为输入,并将其扩展为函数调用中的实际位置参数。 所以如果,那就 这与传递just显然不同。对于你的情况,你有一个要拼合的列表列表;什么确实是在所有你传递给它的位置参数,其中每个位置参数是在自己的权利迭代拼接返回一个迭代。 换句话说,你希望将每个列表作为参数传递给,这会将它

  • 问题内容: 函数参数中的星号有什么作用? 当我查看pickle模块时,我看到了: 我知道在参数之前(对于可变数量的参数)之前的单星号和双星号,但是在此之前没有。而且我很确定这与泡菜无关。那可能只是这种情况的一个例子。我将其发送给翻译人员时才知道它的名字: 如果重要的话,我使用的是python 3.3.0。 问题答案: 用于强制调用方使用命名参数-因此,如果没有以下关键字参数,则无法将函数定义为参数

  • 函数参数中的星号有什么作用? 当我查看pickle模块时,我看到: 我知道前面的参数有一个单星号和双星号(对于可变数量的参数),但是它没有前面的任何东西。我很确定这和泡菜无关。这可能只是这种情况发生的一个例子。当我把这个发给翻译时,我才知道它的名字: 如果重要的话,我使用的是python 3.3.0。

  • 问题内容: 运算符在Python中是什么意思,例如l或代码? 在解释器内部如何处理? 它会影响性能吗?是快还是慢? 什么时候有用,什么时候没有? 应该在函数声明中还是在调用中使用它? 问题答案: 单颗星将序列集合解压缩为位置参数,因此你可以执行以下操作: 这将打开元组的包装,使其实际执行为: 双星 只使用字典并因此命名参数来做同样的事情: 你还可以结合: 另请参见Python文档的4.7.4-解包

  • 给定一个字符串,返回子字符串长度2在该字符串中出现的次数计数,并作为该字符串的最后2个字符,因此“hixxxhi”产生1(我们不计算结束子字符串)。 我在其中一个网站上发现了这个问题(https://codingbat.com/prob/p145834). 网站上对上述问题的回答如下: 我对下面提到的代码行有疑问 现在,我知道这段代码正在提取字符串“str”的最后两个字母。我感到困惑的是变量名。正

  • 问题内容: 我想在Meteor方法内调用异步函数,然后将结果从该函数返回给Meteor.call。 (怎么)可能? 问题答案: 对于这种情况,Meteor现在具有Meteor.wrapAsync()。 这是通过Stripe收费并传递回调函数的最简单方法: