簡體   English   中英

Python - 在if語句之后附加到for循環中的列表

[英]Python - appending to a list in for loop after if statement

我有一個正在修改的列表元素列表。 在修改之后,我想將它們放入一個與原始結構相同的列表中:

list_data_type = [
[['void1']], [['uint8']], [['uint8'], ['uint32']], [['void2']], [['void3']], [['void4']], [['void5']]
]

首先,我檢查具有多個元素的元素。 所以在這種情況下,這將是索引號 = 2 的元素。然后我將其更改為字符串,將其從方括號 [] 和“”標記中刪除並將其轉換為列表。 然后我采用其他元素並做同樣的事情。 轉換后我想用這些元素創建一個新列表,但沒有不必要的符號。 所以我想要的輸出看起來像這樣:

list_data_converted = [
['void1'], ['uint8'], ['uint8', 'uint32'], ['void2'], ['void3'], ['void4'], ['void5']
]

轉換有效,我可以打印出元素,但我在將它們附加到列表時遇到問題。 我的代碼只保存原始列表中的最后一個值:

def Convert(string):
    li = list(string.split(" "))
    return li

for element in list_data_type:
    if type(element) == list:
        print("element is a:", element, type(element))
        if len(element) > 1:
            id_of_el = list_data_type.index(element)
            el_str = str(element).replace('[', '').replace("'", '').replace("'", '').replace(']', '').replace(',', '')
            el_con = Convert(el_str)
        elif len(element <= 1):
            elements_w_1_el = element
            list_el = []
            for i in range(len(elements_w_1_el)):
                el_str_2 = str(element).replace('[', '').replace("'", '').replace("'", '').replace(']', '').replace(',', '')
                list_el.append(elements_w_1_el[i])

而我的 out 看起來像"list_data_converted" ,只有一個元素 - ['void5'] 我該如何解決?

將列表轉換為字符串以將其展平是一種非常……繁瑣的方法。 嘗試簡單的列表理解:

list_data_type = [[v[0] for v in l] for l in list_data_type]

將列表轉換為字符串,然后替換字符,然后再次將字符串轉換為列表可能是實現您正在做的事情的糟糕方法。

試試這個:

def flatten(lst):
    if lst == []:
        return lst
    if isinstance(lst[0], list):
        return flatten(lst[0]) + flatten(lst[1:])
    return lst[:1] + flatten(lst[1:])

list_data_converted = [flatten(element) for element in list_data_type]

這實際上將list_data_type中的任何列表項展平,並將它們保存在一個列表中。 這應該適用於列表中列表的任何深度。 輸出print(list_data_converted)將給出以下內容:

[
    ['void1'], ['uint8'], ['uint8', 'uint32'], ['void2'], ['void3'], ['void4'], ['void5']
]

暫無
暫無

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

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