[英]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.