У меня длинный список списков. Первый элемент в каждом списке - это кортеж с четырьмя строками. В некоторых списках есть второй элемент, который является строкой:
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']
Как я понимаю из вашего объяснения:
Если это фиксированные правила, вы можете быть ясными и простыми.
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
Obs: оператор *
не работает в списках в Python 2.7.
*
. Другое использование находится в определениях функций:def foo(**bar): print(bar)
принимает любое количество аргументовbar
и помещает их в кортеж. Таким образом,foo(1, 2, 3)
выведет(1, 2, 3)