簡體   English   中英

Python - 將列表列表與字符串列表連接起來

[英]Python - Join list of lists with list of strings

我有讀取 a.txt 的 python 腳本。 文件並將項目附加到兩個不同的列表:

//編輯:我的輸入文件的片段: 在此處輸入圖像描述

list_data_type = [
  ['void'], ['uint8'], 
  [['uint8'], ['uint32']], ['void'], 
  ['void'], ['void'], ['void']
]

list_arg_parameter = [
  [None], ['f_MbistTestType_u8'], 
  ['f_MbistTestType_u8', 'f_chip_id_u32'], [None], 
  [None], [None], [None]
]

我想加入兩個列表的相應項目,我知道這可以用 zip 函數完成,但我想在 a.csv 文件中打印兩個列表的結果,我希望將這兩個包含 2 個元素的列表寫入相同的插槽,它看起來像這樣:

file_name_1;function_name_1; void (None)
file_name_1;function_name_2; uint8 f_MbistTestType_u8
file_name_1;function_name_3; uint8 f_MbistTestType_u8, uint32 f_chip_id_u32

此外,我不想要任何“[]”或“''”標志。 現在我試圖將兩個列表都轉換為一個字符串,去掉所有不必要的括號,通過這個函數將這些字符串轉換回列表:

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

然后使用簡單的 for 循環來制作一對元素:

for elements in zip(list_data_type_strpd, list_arg_parameter_strpd): 
    list_func_arg_combined.append(' '.join(elements))

但結果看起來像這樣:

'void '
'uint8 f_MbistTestType_u8'
'uint8 f_MbistTestType_u8'
'uint32 f_chip_id_32'
'void '
'void '
'void '
'void '

我想要它,像這樣:

'void '
'uint8 f_MbistTestType_u8'
'uint8 f_MbistTestType_u8, uint32 f_chip_id_32'
'void '
'void '
'void '
'void '

也許我不必要地將這些列表變成字符串? 也許有更簡單的方法來實現我的目標? 歡迎任何幫助、批評或不同的解決方案。

這是我根據需要打印線條的解決方案:

for data_types, arg_parameters in zip(list_data_type, list_arg_parameter):
    print_line = ""
    for data_type, arg_parameter in zip(data_types, arg_parameters):
        if print_line:
            print_line += ", "
        # You could extract the next line to the `convert` function if you wish to do so
        print_data_type = str(data_type).lstrip("['").rstrip("]'")
        print_line += f"{print_data_type} {arg_parameter}"
    print(print_line)

但是,我認為list_data_type的初始化方式存在錯誤。 具體來說, list_data_type中的第三個元素應該是字符串列表,而不是列表列表。 具體來說,

# This requires us to have a `hacky` convert function
list_data_type = [
  ['void'], ['uint8'], 
  [['uint8'], ['uint32']], ['void'], 
  ['void'], ['void'], ['void']
]
# The proper one would be a list of strings instead
list_data_type = [
  ['void'], ['uint8'], 
  ['uint8', 'uint32'], ['void'],  # Note the difference in this line
  ['void'], ['void'], ['void']
]

由於您提到您有一個讀取 txt 文件並初始化list_data_type的 python 腳本,您可能想要修復它。 修復后,您可以刪除convert函數,它會很好地在輸出中打印您的數據。

使用嵌套列表理解和zip (一級合並兩個列表,一級zip子列表,一級從最低級別的列表中提取字符串):

out = [', '.join([' '.join([z[0] if isinstance(z, list) else z for z in y])
                  if y[1] else y[0]
                  for y in (zip(*x))])
       for x in zip(list_data_type, list_arg_parameter)]

輸出:

['void',
 'uint8 f_MbistTestType_u8',
 'uint8 f_MbistTestType_u8, uint32 f_chip_id_u32',
 'void',
 'void',
 'void',
 'void']

暫無
暫無

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

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