有没有办法将列表的值分配给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)
凡n与p现在等于1和2分别.以上就是我在脑海中思考它的方式,但它不起作用.我尝试使用apply如下:
(apply setq '('(n p) '(1 2)))
Run Code Online (Sandbox Code Playgroud)
我是Lisp的新手,所以如果这是显而易见的事情,请尽量不要过于苛刻,请指出我正确的方向!谢谢.
PS:我在Scheme中看过这样做的帖子和Common Lisp中关于元组扩展的类似帖子,但是这些在回答我的问题时并不是很有帮助1)因为我没有使用Scheme,2)因为排名最高的答案就是这个词apply.
我正在尝试编写一个函数,将表单的字符串'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
我在我的程序中的路径上使用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的方式?
是否可以在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) 在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) 如果我有
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)
我很好奇是否有人可以提供类似的方式来实现我正在寻找的结果.
这个问题源于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)
由于不熟悉这个概念,我很困惑.谁能解释这种行为?已加星标的表达方式是否会根据其所在的方式而有所不同?
我有以下内容:
>>> 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中,我可以写这样的东西:
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 ×8
tuples ×3
list ×2
python-3.x ×2
casting ×1
common-lisp ×1
dictionary ×1
iterable ×1
lisp ×1
r ×1
scala ×1