0

我有 3 个列表:

neighbour = []
scanned = [[],[]]   
localisation = [[],[],[]] 

我想测试扫描列表的第 0 个子列表(列)中的每个项目,看看它是否等同于邻居列表中的任何项目。

如果它是等效的,我想将扫描的两个子列表附加到本地化的第一个和第二个子列表。

我相信这个测试将检查扫描的第 0 个子列表中的项目是否与邻居子列表中的任何项目匹配:

for i in scanned[0]:
    for j in neighbour:
        if i == j:

但我不确定如何将已扫描的两个子列表附加到本地化的第一个和第二个子列表中。

有任何想法吗?

4

2 回答 2

2

好吧,我可能会以不同的方式构建您的列表,但我会在一分钟内完成。

要做你想做的事,你需要以更老派的方式进行迭代:

neighbour = ['a', 'b', 'c']
scanned = [['a', 'b'],[1, 2]]   
localisation = [[],[],[]] 

for i in range(len(scanned[0])):
    if scanned[0][i] in neighbour:
        localisation[1].append(scanned[0][i])
        localisation[2].append(scanned[1][i])
print localisation
>>> [[], ['a', 'b'], [1, 2]]

这是假设我(最终)正确理解了您想要的内容。然而,看起来scanned实际上是两个列表,其中一个列表中的每个元素都以某种方式与另一个列表中的相同索引元素相关。改用 a 可能会让你的生活变得更轻松dict

# The keys from the dict are from scanned[0]; the values are from scanned[1]
scanned = {'a':1, 'b':2}

现在与这些列表有关的所有事情都变得更加容易(包括您必须对它们做的任何其他事情),因为您不必单独跟踪您的索引:

neighbour = ['a', 'b', 'c']
scanned = {'a':1, 'b':2}
localisation = [[], [], []] 

for s in scanned:
    if s in neighbour:
        localisation[1].append(s)
        localisation[2].append(scanned[s])

print localisation
>>> [[], ['a', 'b'], [1, 2]]
于 2013-04-03T19:57:40.387 回答
1

您的问题与 NLP Stemming有关吗?如果是这样,请查看 Python NLTK

要为 中的每个子列表生成匹配元素列表scanned

for l in scanned:
    localisation.append(set(l).intersection(neighbour))

你的定义有点混乱,我不确定我是否理解你想要的。假设len(scanned[0]) == len(scanned[1])

matches = set(neighbour).intersection(scanned[0])
for match in matches:
    i = scanned.index(match)
    localisation.append((match, scanned[0][i], scanned[1][i]))

在这种情况下,字典比列表列表更好。

neighbour = ['Good morning', 'Good afternoon']
scanned = {'Good morning': 'Buenos dias', 'Good night': 'Buenas noches'}
localisation = []

matches = set(neighbour).intersection(scanned.keys())
for match in matches:
    localisation.append((match, scanned[match]))

请提供示例输入和预期输出。

于 2013-04-03T20:00:18.827 回答