Python:将多个列表统一为一个

Python:将多个列表统一为一个,python,Python,你能帮我解决我目前面临的以下挑战吗 我有多个列表,每个列表都包含多个字符串。每个字符串具有以下格式: “ID Type”-其中ID是一个数字,Type是一个常见的Python类型。这里可以找到一个这样的例子: ["1-int", "2-double", "1-string", "5-list", "5-int"], ["3-string", "1-int",

你能帮我解决我目前面临的以下挑战吗

我有多个列表,每个列表都包含多个字符串。每个字符串具有以下格式:

“ID Type”-其中ID是一个数字,Type是一个常见的Python类型。这里可以找到一个这样的例子:

["1-int", "2-double", "1-string", "5-list", "5-int"],
["3-string", "1-int", "1-double", "5-double", "5-string"]
在进一步计算之前,我现在想对这些列表进行预处理,以以下方式统一它们:

  • 计算每种类型在每个列表中出现的频率
  • 生成一个新列表,合并两个结果
  • 创建从初始列表到新列表的映射
例如

在上述列表中,我们有以下类型:

列表1:2整数,1双精度,1字符串,1列表

列表2:2字符串,2双精度,1整数

结果表现在应包含: 2 int,2 double,2 string,1 list(为了能够包含两个列表),如下所示:

[
"int_1-int", 
"int_2-int", 
"double_1-double", 
"double_2-double", 
"string_1-string", 
"string_2-string", 
"list_1-list"
]
最后,为了将输入映射到输出,需要有一个对应的字典来映射这个转换,例如,对于列表_1:

{
"1-int": "int_1-int", 
"2-double": "double_1-double", 
"1-string": "string_1-string", 
"5-list": "list_1-list", 
"5-int": "int_2-int"
}
我想防止通过嵌套循环和多次迭代来实现这一点-是否有库或智能矢量化解决方案来解决这一难题?

只需添加它们: 例如:

['it']+['was']+['happing']

您应该阅读Python教程来学习类似这样的基本信息

只是另一种方法

import itertools
ab = itertools.chain(['it'], ['was'], ['annoying'])
list(ab)

import itertools
ab = itertools.chain(['it'], ['was'], ['annoying'])
list(ab)

我很确定这就是你想要做的:

要编制一份联合清单:

['any item']+['any item 2']
如果要将列表转换为字典,请执行以下操作:

dict(zip(['key 1','key 2'],['value 1','value 2']))
连接两个列表的另一种方法:

a=['列表项','另一个列表项']
a、 扩展(['另一个列表项','另一个列表项']))

只需添加它们:示例:

['it']+['was']+['happing']

您应该阅读Python教程来学习类似这样的基本信息

只是另一种方法

import itertools
ab = itertools.chain(['it'], ['was'], ['annoying'])
list(ab)

import itertools
ab = itertools.chain(['it'], ['was'], ['annoying'])
list(ab)

一般来说,除非您特别需要将结果列表中的项目和dict设置为这种精确的格式,否则这种方法是没有意义的。但你可以这样做:

def process_type_list(type_list):
    mapping = dict()
    for i in type_list:
        i_type = i.split('-')[1]
        n_occur = 1
        map_val = f'{i_type}_{n_occur}-{i_type}'
        while map_val in mapping.values():
            n_occur += 1
            map_val = f'{i_type}_{n_occur}-{i_type}'

        mapping[i] = map_val
    return mapping


l1 = ["1-int", "2-double", "1-string", "5-list", "5-int"]
l2 = ["3-string", "1-int", "1-double", "5-double", "5-string"]

l1_mapping = process_type_list(l1)
l2_mapping = process_type_list(l2)


此外,Python没有
double
类型。C double被实现为Python
float
s(或者如果您需要精确控制精度)

所以您想同时创建两个:一个组合列表和一个字典?而不是将第一个带有id号和类型的列表卡在一个单独的strig中,在这里使用元组会更干净-这意味着您可以在每次不处理字符串的情况下获得类型。更妙的是,元组仍然可以用作字典中的键。而且,所有这些都在字典中。