标签: iterable-unpacking

元组解包类似于Python,但在Common Lisp中

有没有办法将列表的值分配给Common Lisp中的符号列表,类似于在Python中将元组值赋值给变量的方式?

x, y, z = (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

就像是

(setq '(n p) '(1 2))
Run Code Online (Sandbox Code Playgroud)

np现在等于12分别.以上就是我在脑海中思考它的方式,但它不起作用.我尝试使用apply如下:

(apply setq '('(n p) '(1 2)))
Run Code Online (Sandbox Code Playgroud)

我是Lisp的新手,所以如果这是显而易见的事情,请尽量不要过于苛刻,请指出我正确的方向!谢谢.

PS:我在Scheme中看过这样做的帖子和Common Lisp中关于元组扩展的类似帖子,但是这些在回答我的问题时并不是很有帮助1)因为我没有使用Scheme,2)因为排名最高的答案就是这个词apply.

lisp python list common-lisp iterable-unpacking

12
推荐指数
3
解决办法
1476
查看次数

Python - 在dict理解中解组的元组

我正在尝试编写一个函数,将表单的字符串'A=5, b=7'转换为字典{'A': 5, 'b': 7}.以下代码片段是主for循环内部发生的- 它们将字符串的单个部分转换为单个dict元素.

这可以:

s = 'A=5'
name, value = s.split('=')
d = {name: int(value)}
Run Code Online (Sandbox Code Playgroud)

这不是:

s = 'A=5'
d = {name: int(value) for name, value in s.split('=')}
ValueError: need more than 1 value to unpack
Run Code Online (Sandbox Code Playgroud)

为什么我不能在字典理解中解包元组?如果我得到这个工作,那么我可以轻松地将整个功能变成一个紧凑的字典理解.

python dictionary dictionary-comprehension iterable-unpacking

12
推荐指数
3
解决办法
8104
查看次数

是否可以在不使用变量的情况下解包元组?

我在我的程序中的路径上使用os.path.split()函数来获取文件的文件名和路径名,然后将它们传递给另一个方法,但我当前的解决方案看起来相当丑陋:

path = os.path.split(somefile)
some_class(path[0], path[1])
Run Code Online (Sandbox Code Playgroud)

是否可以在调用some_class时以更干净的方式解压缩路径元组?就像是:

some_class(os.path.split(somefile).unpack())
Run Code Online (Sandbox Code Playgroud)

或者我应该简单地以另一种方式去做?也许是更加pythonic的方式?

python tuples iterable-unpacking

11
推荐指数
1
解决办法
1548
查看次数

Scala:元组的并行分配

是否可以在Scala中并行分配元组成员.如果没有,是否有其他技术可以完成类似的事情?

val players = List(
    new Player("Django Reinhardt", 42), 
    new Player("Sol Hoopii", 57),
    new Player("Marc Ribot", 64)
)

val winners, losers = players.partition(p => p.score > 50)

// winners = List(Player name:Sol Hoopii score: 57, Player name:Marc Ribot score: 64)
// losers = List(Player name:Django Reinhardt score: 42)
Run Code Online (Sandbox Code Playgroud)

scala tuples iterable-unpacking

11
推荐指数
1
解决办法
1406
查看次数

类似Python的解压缩R中的数值

在Python中,可以这样做:

>>> a, b, c = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3
Run Code Online (Sandbox Code Playgroud)

有没有办法在R中进行,如下所示?

> a, b, c = c(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

r iterable-unpacking

11
推荐指数
2
解决办法
3337
查看次数

Python元组解包

如果我有

 nums_and_words = [(1, 'one'), (2, 'two'), (3, 'three')]
Run Code Online (Sandbox Code Playgroud)

并希望

nums = [1, 2, 3]
words= ['one', 'two', 'three']
Run Code Online (Sandbox Code Playgroud)

我怎么用Pythonic方式做到这一点?我花了一分钟才意识到为什么以下不起作用

nums, words = [(el[0], el[1]) for el in nums_and_words]
Run Code Online (Sandbox Code Playgroud)

我很好奇是否有人可以提供类似的方式来实现我正在寻找的结果.

python list-comprehension iterable-unpacking

11
推荐指数
1
解决办法
5044
查看次数

赋值语句左侧与右侧的Star*运算符

这个问题源于PEP 448- 其他解包通用化,并且据我所知(并且没有后端移植到2.x),它存在于Python 3.5中.具体而言,在" 缺点 "一节中,注意到以下内容:

虽然*elements, = iterable原因elements是一list, elements = *iterable,导致elements成为一个tuple.造成这种情况的原因可能会让那些不熟悉这种结构的人感到困惑.

确实如此,因为iterable = [1, 2, 3, 4]第一种情况产生了list:

>>> *elements, = iterable
>>> elements
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

而对于第二种情况tuple,创建了一个:

>>> elements = *iterable,
>>> elements
(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)

由于不熟悉这个概念,我很困惑.谁能解释这种行为?已加星标的表达方式是否会根据其所在的方式而有所不同?

python iterable python-3.x iterable-unpacking

11
推荐指数
1
解决办法
2272
查看次数

拆包时是否可以指定默认值?

我有以下内容:

>>> myString = "has spaces"
>>> first, second = myString.split()
>>> myString = "doesNotHaveSpaces"
>>> first, second = myString.split()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
Run Code Online (Sandbox Code Playgroud)

如果字符串没有任何空格,我想second默认None.我目前有以下内容,但我想知道是否可以在一行中完成:

splitted = myString.split(maxsplit=1)
first = splitted[0]
second = splitted[1:] or None
Run Code Online (Sandbox Code Playgroud)

python python-3.x iterable-unpacking

11
推荐指数
3
解决办法
2737
查看次数

Python:解压缩到未知数量的变量?

我怎么能解压一个未知的元组,比如一个列表呢?

我有许多数据列,它们通过某些函数分成一个元组.我想将这个元组解压缩到变量,但我不知道我会有多少列.有没有办法动态解压缩到我需要的变量?

谢谢你的帮助 :)

python casting iterable-unpacking

10
推荐指数
2
解决办法
9684
查看次数

为什么带星号的赋值会生成列表而不是元组?

在Python中,我可以写这样的东西:

some_list = [(1, 2, 3), (3, 2, 1)]

for i, *args in some_list:
   print(args)
Run Code Online (Sandbox Code Playgroud)

我将得到下一个输出:

[2, 3]
[2, 1]
Run Code Online (Sandbox Code Playgroud)

当我们用作*args函数参数时,它会被解压缩到tuple.

为什么我们会list在这种情况下收到 a ?

python tuples list iterable-unpacking

10
推荐指数
1
解决办法
512
查看次数