相关疑难解决方法(0)

如何将长度为n的元组解包为m <n个变量

在Python 3中,我可以执行以下操作(另请参阅PEP3132 on Extended Iterable Unpacking):

a, *b = (1, 2, 3)
# a = 1; b = (2, 3)
Run Code Online (Sandbox Code Playgroud)

我能做些什么才能在Python 2.x中实现同样优雅?


我知道我可以使用单元素访问和切片操作,但我想知道是否有更多的pythonic方式.我的代码到目前为止:

a, b = (1, 2, 3)[0], (1, 2, 3)[1:]
# a = 1; b = (2, 3)
Run Code Online (Sandbox Code Playgroud)

python iterable-unpacking

45
推荐指数
3
解决办法
3万
查看次数

如何在Python2中处理可变长度子列表解包?

如何在Python2中处理可变长度子列表解包?

在Python3中,如果我有可变的子列表长度,我可以使用这个成语:

>>> x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]
>>> for i, *item in x:
...     print (item)
... 
[2, 3, 4, 5]
[4, 6]
[5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

在Python2中,它是一个无效的语法:

>>> x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]
>>> for i, *item in x:
  File "<stdin>", line 1
    for i, *item in x:
           ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这个问题与解释最大大小为n的可变长度列表的惯用法有一点不同,其中解决方案需要固定长度的知识.

这个问题特定于解决Python2中的问题.

python list nested-lists python-2.7

6
推荐指数
1
解决办法
501
查看次数

如何从元组中解压缩可选项?

我有一些输入值的列表,其中第一对是强制性的,最后一对是可选的.是否有任何简单的方法可以使用元组解包将这些分配给变量,如果缺少可选参数则获取None.

例如.

a = [1,2]   
foo, bar, baz = a
# baz == None
Run Code Online (Sandbox Code Playgroud)

理想情况下,可以是任何长度 - 包括超过3(其他物品扔掉).

目前我正在使用带有参数名称列表的zip来获取字典:

items = dict(zip(('foo', 'bar', 'baz'), a))
foo = items.get('foo', None)
bar = items.get('bar', None)
baz = items.get('baz', None)
Run Code Online (Sandbox Code Playgroud)

但它有点啰嗦.

python tuples iterable-unpacking

5
推荐指数
2
解决办法
3082
查看次数

如何将元组解压缩到比元组更多的值?

我有一个元组列表,每个元组包含1到5个元素.我想将这些元组解压缩为五个值,但这对于少于五个元素的元组不起作用:

>>> t = (1,2) # or (1) or (1,2,3) or ...
>>> a,b,c,d,e = (t)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack
Run Code Online (Sandbox Code Playgroud)

可以将不存在的值设置为None.基本上,如果这个函数我正在寻找更好(更密集)的方法:

def unpack(t):
    if len(t) == 1:
        return t[0], None, None, None, None
    if len(t) == 2:
        return t[0], t[1], None, None, None
    if len(t) == 3:
        return t[0], t[1], t[2], None, None
    if len(t) == 4:
        return t[0], t[1], t[2], t[3], None …
Run Code Online (Sandbox Code Playgroud)

python tuples python-3.x iterable-unpacking

5
推荐指数
1
解决办法
550
查看次数

用Python解压缩列表

假设我有一个MySQL表,我通过My​​SQLDB访问.我有一个标准

SELECT statement:
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
Run Code Online (Sandbox Code Playgroud)

然后我用光标执行它并拔出列,如下所示.

   cursor.execute(sql)
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
Run Code Online (Sandbox Code Playgroud)

是否可以在单个语句中分配所有列名?就像是:

for row in results:
    fname, lname, age, sex, income = unpack(row)
Run Code Online (Sandbox Code Playgroud)

我总能这样做:

fname, lname, age, sex, income = row[0], row[1], row[2], row[3], row[4]
Run Code Online (Sandbox Code Playgroud)

但是我的桌子上有30多列,这很痛苦.请注意,虽然我现在正在使用MySQL,但我希望它尽可能与数据库无关; 我们仁慈的霸主可能决定在任何时候将一切都移植到另一个数据库.

list python-2.6

3
推荐指数
1
解决办法
2682
查看次数

如何直接从列表范围分配变量值

我正试图找到一种更好,更pythonic的方式来解决这段代码:

for i in rows:
    row_data = i.findAll('td')
    serial = row_data[0]
    hostname = row_data[1]
    owner = row_data[2]
    memory = row_data[3]
    processor = row_data[4]
    os = row_data[5]
    model = row_data[6]
    ip = row_data[7]
Run Code Online (Sandbox Code Playgroud)

我正在尝试做这样的事情:

 [serial, hostname, owner, memory, etc..] = row_data[:7]
Run Code Online (Sandbox Code Playgroud)

关于如何实现这一点的任何想法?

有或没有索引我收到此消息:[serial,hostname,owner,memory,processor,os,model,be_ip] = row_data ValueError:要解压的值太多

python

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

当可能没有足够的值可以解压缩时,将列表值干净地分配给多个变量

例如,如果我要指派a, b, cl = [1,2,3,4,5],我可以做

a, b, c = l[:3]
Run Code Online (Sandbox Code Playgroud)

但是,如果l只有[1,2][1][])怎么办?

有没有一种方法可以自动将其余变量设置为None''0或其他某个默认值?

我考虑过在分配以匹配变量数量之前使用默认值扩展列表,但是只是想知道是否有更好的方法。

python list variable-assignment

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