我有一份清单清单:
[['X', 'AX', 'AXG'], ['X', 'XG', 'AXG'], ['X', 'XG', 'XGG'], ['X', 'AX', 'CAX']]
我希望得到
['X', 'AX']
因此,从['AX', 'CAX']
和['X', 'AX', 'CAX']
我想得到{"error"=>"You must provide a valid authenticated access token."}
,其中第一个列表的第二个元素是第二个元素的第一个元素。
有没有可能达到它?
答案 0 :(得分:0)
只是一个天真的实施..
你可以把它简化为1d对象数组(在我们的例子中是list()
),并比较从1st开始到所有下一个元素的对象。
只需选择第一个元素并将其与条件的所有下一个元素匹配,然后选择第二个并将其与下一个元素匹配,依此类推......
这里我们对象的条件是让第一个对象的索引1等于第二个对象的索引1,所以你将像这样实现它 -
l = [['X', 'AX'],['X', 'XG'],['XG', 'AXG'],['AX', 'CAX'],['XG', 'XGG'],['AX', 'AXG']]
l1 = list()
for i in range(len(l)):
for j in range(i+1, len(l)):
if l[i][1] == l[j][0]:
l1.append(l[i]+[l[j][1]])
print "l1 = %r"%l1
Output: l1 = [['X', 'AX', 'CAX'], ['X', 'AX', 'AXG'], ['X', 'XG', 'AXG'], ['X', 'XG', 'XGG']]
答案 1 :(得分:0)
这是我过于复杂的实现,它避免gsutil web set -m index.html gs://elving
的方式,我认为这种方法在声称是高级语言时被过度使用,而是滥用range()
:
reduce()
输出
from functools import reduce
from itertools import takewhile, dropwhile
array = [['X', 'AX'], ['X', 'XG'], ['XG', 'AXG'], ['AX', 'CAX'], ['XG', 'XGG'], ['AX', 'AXG']]
def partition(predicate, array):
return list(takewhile(predicate, array)), dropwhile(predicate, array)
def reducer(accumulated, update):
for solution in accumulated:
if solution[-1] == update[0]:
accumulated.append(solution + update[1:])
return accumulated
min_length = len(array[0][0])
heads, tails = partition(lambda x: len(x[0]) == min_length, array)
reduction = reduce(reducer, tails, heads)
max_length = len(reduction[-1])
print(list(dropwhile(lambda x: len(x) != max_length, reduction)))
如果我们将输入更改为:
[['X', 'XG', 'AXG'], ['X', 'AX', 'CAX'], ['X', 'XG', 'XGG'], ['X', 'AX', 'AXG']]
我们得到预期的输出:
array = [['X', 'AX'], ['AX', 'CAX'], ['AX', 'AXG'], ['CAX', 'XYZ'], ['CAX', 'ABC'], ['AXG', 'DEF'], ['AXG', 'MNO']]
但是我怀疑OP的规范中没有正确涵盖输入的几个潜在的异常情况。