Python:将多个列表统一为一个
你能帮我解决我目前面临的以下挑战吗 我有多个列表,每个列表都包含多个字符串。每个字符串具有以下格式: “ID Type”-其中ID是一个数字,Type是一个常见的Python类型。这里可以找到一个这样的例子:Python:将多个列表统一为一个,python,Python,你能帮我解决我目前面临的以下挑战吗 我有多个列表,每个列表都包含多个字符串。每个字符串具有以下格式: “ID Type”-其中ID是一个数字,Type是一个常见的Python类型。这里可以找到一个这样的例子: ["1-int", "2-double", "1-string", "5-list", "5-int"], ["3-string", "1-int",
["1-int", "2-double", "1-string", "5-list", "5-int"],
["3-string", "1-int", "1-double", "5-double", "5-string"]
在进一步计算之前,我现在想对这些列表进行预处理,以以下方式统一它们:
- 计算每种类型在每个列表中出现的频率
- 生成一个新列表,合并两个结果
- 创建从初始列表到新列表的映射
[
"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被实现为Pythonfloat
s(或者如果您需要精确控制精度)所以您想同时创建两个:一个组合列表和一个字典?而不是将第一个带有id号和类型的列表卡在一个单独的strig中,在这里使用元组会更干净-这意味着您可以在每次不处理字符串的情况下获得类型。更妙的是,元组仍然可以用作字典中的键。而且,所有这些都在字典中。