Python 按索引组合字符串列表中的元素
我有一个这样的字符串列表Python 按索引组合字符串列表中的元素,python,python-3.x,reshape,Python,Python 3.x,Reshape,我有一个这样的字符串列表 list1 = ["['First Standard', 'First Flex', 'Business Standard']", " ['P,F', 'A', 'C,D,F,G']"] 我想把它改成这样: list2 = ["['First Standard','P','F']", "['First Flex','A']", "['Business Standard','C','D','F','G']"] 如果要处理相关数据的并行集合,则zip
list1 = ["['First Standard', 'First Flex', 'Business Standard']", "
['P,F', 'A', 'C,D,F,G']"]
我想把它改成这样:
list2 = ["['First Standard','P','F']", "['First Flex','A']", "['Business
Standard','C','D','F','G']"]
如果要处理相关数据的并行集合,则
zip
函数非常有用
a=[1,2,3]
b=[4,5,6]
zip(a,b)
> [(1,4), (2,5), (3,6)]
您还可以获取ast.literal\u eval
以从这些字符串中获取列表
ast.literal_eval("[1,2,3]")
> [1,2,3]
将此应用于您的案例:
data = ["['First Standard', 'First Flex', 'Business Standard']", "['P,F', 'A', 'C,D,F,G']"]
result = [[x] + y.split(",") for (x,y) in zip(ast.literal_eval(data[0]),ast.literal_eval(data[1]))]
编辑:
您还可以将此数据视为有效的json并使用它
import json
result = [[x] + y.split(",") for (x,y) in zip(json.loads(data[0]),json.loads(data[1]))]
如果要避免eval表达式(出于安全原因,我强烈建议使用该表达式),可以使用正则表达式。如注释中所述,如果数据包含嵌套单引号,则需要对此进行更改
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import re
start_list = [
"['First Standard', 'First Flex', 'Business Standard']",
"['P,F', 'A', 'C,D,F,G']"
]
pattern = "'(.*?)'"
new_list = []
for stringsInList in start_list:
words = re.findall(pattern, stringsInList)
new_list.append(words)
final = [(a, b) for a, b in zip(new_list[0], new_list[1])]
print(final)
#[('First Standard', 'P,F'), ('First Flex', 'A'), ('Business Standard', 'C,D,F,G')]
编辑-稍微精简一点
伟大的你有什么问题吗?代码前面是否有一点可以使用列表对象,而不是repr()格式?没有代码,只是格式怪异的数据。他有字符串,而不是列表对象。顺便说一句,要非常小心,确保你可以信任你的数据源。更好的是,尝试以其他方式解析数据,我在这里使用eval来简化,但这很容易受到代码注入的影响。你读过问题了吗?您的答案与本例无关。我强烈建议您不要使用eval。您可以使用
ast.literal\u eval
而不是原始eval
。直到字符串包含单引号。您可以调整模式,我只按照他给出的方式进行操作。
start_list = [
"['First Standard', 'First Flex', 'Business Standard']",
"['P,F', 'A', 'C,D,F,G']"
]
new_list = [re.findall("'(.*?)'", x) for x in start_list]
final = [(a, b) for a, b in zip(new_list[0], new_list[1])]
print(final)