簡體   English   中英

按特定順序在列表列表中解開元組

[英]Unpacking tuples within a list of lists with specific order

我的清單很長。 每個列表中的第一項是具有四個字符串的元組。 其中一些列表還有第二個項目,它是一個字符串:

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中的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM