我的名单很长。每个列表中的第一项是具有四个字符串的元组。其中一些列表还有第二个项目,它是一个字符串:
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']
如何才能按照特定顺序解开元组?使用数字作为关键字的字典对我来说最简单吗?到目前为止,我的主要问题是区分在元组之外具有最终字符串的列表的过程。
答案 0 :(得分:2)
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']
答案 1 :(得分:0)
据您了解,解释:
如果这些是固定规则,那么您可以明确而简单。
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的列表中不起作用。