Python - 与其他同步拆分列表
有时,在处理Python数据时,我们可能会遇到需要对字符串进行拆分的问题,该字符串与其他列表中的元素有映射,因此需要对因拆分而形成的不同单词进行映射。这类问题比较特殊,但可以在很多领域都有应用。让我们讨论可以执行此任务的某些方式。
Input : test_list = [5, 6], str_list = [‘Gfg is best’, ‘I love Gfg’]
Output : [5, 5, 5, 6, 6, 6]
Input : test_list = [5], str_list = [‘Gfg is best’]
Output : [5, 5, 5]
方法 #1:使用map() + zip() + enumerate() + split()
上述功能的组合可以用来解决这个问题。在此,我们使用 split() 执行拆分值的任务,并使用 zip() 和 map() 执行相应的元素映射。使用 enumerate() 进行迭代。
# Python3 code to demonstrate working of
# Synchronized Split list with other
# Using map() + zip() + enumerate() + split()
# initializing list
test_list = [5, 6, 3, 7, 4]
# printing original list
print("The original list is : " + str(test_list))
# initializing String list
str_list = ['Gfg', 'is best', 'I love', 'Gfg', 'and CS']
# Synchronized Split list with other
# Using map() + zip() + enumerate() + split()
temp = list(map(list, zip(*[(idx, sub) for idx, val in
enumerate(map(lambda x: x.split(), str_list), 1) for sub in val])))
res = []
for ele in temp[0]:
res.append(test_list[ele - 1])
# printing result
print("Mapped list elements : " + str(res))
输出 :
The original list is : [5, 6, 3, 7, 4]
Mapped list elements : [5, 6, 6, 3, 3, 7, 4, 4]
方法 #2:使用chain.from_iterables() + zip()
这是可以执行此任务的另一种方式。在此,我们使用 chain.from_iterables() 执行展平任务,并使用 zip() 执行并行迭代。
# Python3 code to demonstrate working of
# Synchronized Split list with other
# Using chain.from_iterables() + zip()
from itertools import chain
# initializing list
test_list = [5, 6, 3, 7, 4]
# printing original list
print("The original list is : " + str(test_list))
# initializing String list
str_list = ['Gfg', 'is best', 'I love', 'Gfg', 'and CS']
# Synchronized Split list with other
# Using chain.from_iterables() + zip()
res = list(chain.from_iterable([[sub1] * len(sub2.split()) for sub1, sub2 in zip(test_list, str_list)]))
# printing result
print("Mapped list elements : " + str(res))
输出 :
The original list is : [5, 6, 3, 7, 4]
Mapped list elements : [5, 6, 6, 3, 3, 7, 4, 4]