我试图在不使用字典的情况下连接列表中的元组中的值。具体来说,我有这个清单:
<NSCopying, NSMutableCopying,NSSecureCoding
我想创建一个包含随机元组值的列表:
adjList = [('0', '3'), ('1', '0'), ('3', '2'), ('4', '2'), ('5', '4'), ('7', '9'),
('8', '7'), ('9', '6'), ('2', '1'), ('2', '6'), ('6', '5'), ('6', '8')]
然后如果该元组的第一个值与newList的最后一个值相同,则从adjList追加元组的第二个值,因此:
newList = ['1', '0']
然后从adjList中删除(&#39; 1&#39;,&#39; 0&#39;)和(&#39; 0&#39;,&#39; 3&#39;)。
然后我想重复此操作,直到newList NO LONGER中的最后一个值对应于来自adjList的元组的第一个值。我很难找到可以做到这一点的while或for循环的逻辑组合,并且任何帮助都会受到赞赏。
到目前为止我的代码:
newList = ['1', '0', '3']
一切都按照它应该的方式工作,但当然我最后只在newList中得到3个值。我无法解决如何重复最后一段代码,直到我在adjList中用完元组。
提前感谢您的帮助。
答案 0 :(得分:1)
当while
上仍有项目时,您可以运行外部adjList
循环。内循环可以从adjList
中选择第一个合适的项目,并将结果附加到newList
。如果内环不能找到合适的项,则应终止外环。
以下是上述示例:
import random
adjList = [('0', '3'), ('1', '0'), ('3', '2'), ('4', '2'), ('5', '4'), ('7', '9'),
('8', '7'), ('9', '6'), ('2', '1'), ('2', '6'), ('6', '5'), ('6', '8')]
newList = list(adjList.pop(random.randint(0, len(adjList) - 1)))
while adjList:
for i, (src, dest) in enumerate(adjList):
if src == newList[-1]:
del adjList[i]
newList.append(dest)
break
else:
break
print('Result: {}'.format(newList))
print('Remaining: {}'.format(adjList))
输出:
Result: ['4', '2', '1', '0', '3', '2', '6', '5', '4']
Remaining: [('7', '9'), ('8', '7'), ('9', '6'), ('6', '8')]
答案 1 :(得分:0)
我不确定以下代码是否适用于您的需求,但我认为只要对代码进行少量更改,您就应该能够执行您想要的操作。
我添加了一个while
循环,每次在结构发生变化时运行(基本上,每次第一个项目与newList
中的最后一项匹配的元组):
#!/usr/bin/env python
import random
adjList = [('0', '3'), ('1', '0'), ('3', '2'), ('4', '2'), ('5', '4'), ('7', '9'),
('8', '7'), ('9', '6'), ('2', '1'), ('2', '6'), ('6', '5'), ('6', '8')]
firstNode = random.choice(adjList)
newList = []
newList.append(firstNode[0])
newList.append(firstNode[1])
changes_made = True
while changes_made:
changes_made = False
for item in adjList:
if item[0] == newList[-1]:
newList.append(item[-1])
adjList.remove(item)
changes_made = True
break
print newList