在具有特定顺序的列表列表中解压缩元组



我有一长串列表。每个列表中的第一项是一个包含四个字符串的元组。一些列表有第二个项目,它是一个字符串:

list_one = [('string1', 'number', 'Longstring1', 'long_string2'), 'long_string3']
list_two = [('string5', 'number1', 'Longstring4', 'long_string5')]  

我想遍历每个列表,以便最好将数字字符串转换为列表开头的整数,元组中的其余项目是它们自己的列表项。如果无法将数字字符串转换为整数,只要它们位于列表中的第一个位置即可。所以它有望看起来像这样:

new_list_one = [number, 'string1', 'Longstring1', 'long_string2', 'long_string3']
new_list_two = [number, 'string5', 'Longstring4', 'long_string5']  

如何在特定订单中解压缩元组?对我来说,使用以数字为键的字典是最简单的吗?到目前为止,我的主要问题是区分具有元组之外的最后一个字符串的列表的过程。

list_one = [('string1', '100', 'Longstring1', 'long_string2'), 'long_string3']
list_two = [('string5', '200', 'Longstring4', 'long_string5')] 

您可以解压缩元组,切换第一个和第二个元素,并尝试转换为和int

def int_if_possible(val):
try:
return int(val)
except ValueError:
return val
def unpack(l):
ret = [*l[0], *l[1:]]
ret[0], ret[1] = int_if_possible(ret[1]), ret[0]
return ret
print(unpack(list_one))
# [100, 'string1', 'Longstring1', 'long_string2', 'long_string3']
print(unpack(list_two))
# [200, 'string5', 'Longstring4', 'long_string5']

正如我从你的解释中了解到的那样:

  • 元组的第二个元素始终是整数
  • 元组始终有 4 个元素
  • 列表有时只有一个元素

如果这些是固定的规则,你可以明确而简单。

def trans(lst):
ret = [int(lst[0][1]), lst[0][0], lst[0][2], lst[0][3]]
if len(lst) == 2:
ret.append(lst[1])
return ret

注意:*运算符在 Python 2.7 中的列表中不起作用。

最新更新