所以我得到了这个清单
integer_data=[[2, 3, 4, 5], [1, 2, 3, 6], [1, 3, 6], [0, 1, 5, 6], [1, 2, 3, 4]]
我得到了另一份清单
adjList=[[1, 0], [0, 2, 3, 1], [1, 3, 4, 5, 2], [1, 2, 4, 5, 3], [2, 3, 5, 6, 4], [2, 3, 4, 6, 5], [4, 5, 6]]
和一个空列表
listPrint=[]
我想在integer_data的每个列表中取第一个数字;例如。 no.2然后在adjList中找到最后一个数字与该数字匹配的列表(在本例中为no.2),这是list [1,3,4,5,2]。如果列表中的项目在integer_data中是不在[1,3,4,5,2]然后我追加“没有'列表打印,否则我追加'是'然后我转到integer_data中的下一个列表并重复。
adjList中每个列表的最后一个数字是唯一的。输出应为
resultList=['Yes','No','No','No','No','No']
我尝试使用此代码,结果相当遥远。我是Python的新手,所以任何帮助都会受到赞赏。
for item in integer_data:
itemToCheck=item[0]
for itemTwo in adjList:
itemTwoToCheck=itemTwo[-1]
if itemToCheck==itemTwoToCheck:
itemToCompareOne=item
itemToCompareTwo=itemTwo
for itemThree in itemToCompareOne:
if itemThree not in itemToCompareTwo:
listPrint.append('No')
else:
listPrint.append('Yes')
答案 0 :(得分:0)
这是一个独立于编程语言的纯算法问题。
以下方法可以帮助您有效地实现目标:
希望这种方法进一步破解:)
答案 1 :(得分:0)
让我们通过你的例子。根据您的说明,我认为预期答案为['yes', 'no', 'no', 'no', 'no']
,因为5
中只有integer_data
个列表。
另外,为简洁起见,我将这两个列表重命名为A
和B
。
A=[[2, 3, 4, 5], [1, 2, 3, 6], [1, 3, 6], [0, 1, 5, 6], [1, 2, 3, 4]]
B=[[1, 0], [0, 2, 3, 1], [1, 3, 4, 5, 2], [1, 2, 4, 5, 3], [2, 3, 5, 6, 4], [2, 3, 4, 6, 5], [4, 5, 6]]
listPrint=[]
# Construct dictionary d.
# For every list in B, map its last element to the list itself
d={}
for list_b in B:
d[list_b[-1]] = list_b
'''
In your example, d is
{ 0: [1, 0],
1: [0, 2, 3, 1],
2: [1, 3, 4, 5, 2],
3: [1, 2, 4, 5, 3],
4: [2, 3, 5, 6, 4],
5: [2, 3, 4, 6, 5],
6: [4, 5, 6]
}
'''
for list_a in A:
list_b = d[list_a[0]] # find the corresponding list_b
answer = 'yes'
for a in list_a:
if a not in list_b:
answer = 'no'
break
listPrint.append(answer)
print(listPrint) # ['yes', 'no', 'no', 'no', 'no']
答案 2 :(得分:0)
列表理解是循环遍历列表中项目并通过输入列表元素上的操作创建新列表的pythonic方法
alast = [e[-1] for e in adjList]
['Yes' if (d[0] in alast) and
set(d).issubset(adjList[alast.index(d[0])])
else 'No'
for d in integer_data]
['Yes', 'No', 'No', 'No', 'No']
第一个listcomp列出e[-1]
e
中的最后一个数字adjList
第二个块实际上是一个列表推导(添加换行符),它从最后一行的d
获取子列表integer_data
:for d in integer_data
根据第1行和第2行之间的逻辑分割,前3行的内联if-else给出'Yes'
或'No'
第一行逻辑(d[0] in alast)
非常明显
逻辑上的第二行" and
- ed"第一次检查d
中的所有数字是否都在alast.index(d[0])
的匹配索引adjList
子列表中,使用python' s set
内置对象' s .issubset()
方法逻辑