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)