我有一个列表,列表中的每个项目也是一个列表。
所有的子列表都有两个元素,它们连接在一起,
[l1, l2, l3, l4...]
它们连接在一起的方式是l2[-1]
等于l1[0]
,l3[-1]
等于l2[0]
,l4[-1]=l3[0]
等等。
所有的子列表都有字符串元素,比如'1 2 3'
(它是由空格分隔的多个唯一数字)或'7'
(只有一个数字)。
我想对下面的列表做一个转换
[['1 2 3', '4 5'], ['6 7', '1 2 3'], ['10', '6 7']]
输出将是
[[['1', '4'], ['6', '1'], ['10', '6']],
[['2', '4'], ['6', '2'], ['10', '6']],
[['3', '4'], ['6', '3'], ['10', '6']],
[['1', '5'], ['6', '1'], ['10', '6']],
[['2', '5'], ['6', '2'], ['10', '6']],
[['3', '5'], ['6', '3'], ['10', '6']],
[['1', '4'], ['7', '1'], ['10', '7']],
[['2', '4'], ['7', '2'], ['10', '7']],
[['3', '4'], ['7', '3'], ['10', '7']],
[['1', '5'], ['7', '1'], ['10', '7']],
[['2', '5'], ['7', '2'], ['10', '7']],
[['3', '5'], ['7', '3'], ['10', '7']]]
哪里
我有一条线索,就像你必须把每一个点(例子中的六个点)都传递出去,然后挑出一个数字,选择哪个数字取决于你之前选择的一对,到目前为止,我还没有取得更多的进展。
发布于 2020-09-10 12:36:07
如果您不想生成所有的组合,然后选择“有效的”组合,那么首先可以从列表中获得唯一的值。然后,您可以获得这些字符串的itertools.product
(在拆分字符串之后),并从这些列表中重构“链接”列表:
lst = [['1 2 3', '4 5'], ['6 7', '1 2 3'], ['10', '6 7']]
sub = [lst[0][1]] + [x[0] for x in lst] # ['4 5', '1 2 3', '6 7', '10']
res = [ [(b,a) for a,b in zip(p, p[1:])] for p in product(*map(str.split, sub))]
我在这里使用元组而不是嵌套列表,只是为了理解复杂列表的可读性,可以使用更多的(...)
替换[...]
。结果:
[[('1', '4'), ('6', '1'), ('10', '6')],
[('1', '4'), ('7', '1'), ('10', '7')],
[('2', '4'), ('6', '2'), ('10', '6')],
[('2', '4'), ('7', '2'), ('10', '7')],
[('3', '4'), ('6', '3'), ('10', '6')],
[('3', '4'), ('7', '3'), ('10', '7')],
[('1', '5'), ('6', '1'), ('10', '6')],
[('1', '5'), ('7', '1'), ('10', '7')],
[('2', '5'), ('6', '2'), ('10', '6')],
[('2', '5'), ('7', '2'), ('10', '7')],
[('3', '5'), ('6', '3'), ('10', '6')],
[('3', '5'), ('7', '3'), ('10', '7')]]
发布于 2020-09-10 12:59:00
import copy
lst = [['1 2 3', '4 5'], ['6 7', '1 2 3'], ['10', '6 7']]
def print_list(ls):
if ls is not None:
for x in ls:
print x
def transform_list(l):
if(len(l)==0):
print 'list provided is empty'
return None
tr=[] # intermediate transformed list
for b in l[0][-1].split(' '):
for a in l[0][0].split(' '):
tr = tr + [[[a,b]]]
for i in range(1,len(l)):
new_tr = []
for a in l[i][0].split(' '):
temp_tr=copy.deepcopy(tr)
for t in range(len(temp_tr)):
temp_tr[t].append( [a,temp_tr[t][-1][0]] )
new_tr = new_tr + temp_tr
tr=copy.deepcopy(new_tr)
return tr
print '\n\nOutput:'
transformed_list = transform_list(lst)
print_list(transformed_list)
https://stackoverflow.com/questions/63827521
复制相似问题