按索引组合字符串列表中的元素

Combine elements in list of strings by indices

我有一个这样的字符串列表

 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_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')]

编辑 - 稍微压缩一些

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)