按索引组合字符串列表中的元素
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)
我有一个这样的字符串列表
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)