相对的绝对位置

时间:2011-08-17 10:41:13

标签: python list

如果我有一个包含单词串的Python列表,如何获得整个列表中给定单词的绝对位置,而不是字符串中的相对位置?

l = ['0word0 0word1 0word2', '1word0 1word1 1word2', '2word0 2word1']
rel_0word2 = l[0].split().index('1word2') # equals 2
abs_0word2 = ??? # equals 5

提前致谢。

5 个答案:

答案 0 :(得分:3)

不确定绝对位置的含义,请在下面找到我的样本:

l = ['0word0 0word1 0word2', '1word0 1word1 1word2', '2word0 2word1']

print [x for w in l for x in w.split()].index('1word2')

或者:

def get_abs_pos(lVals, word):
    return [i for i,x in enumerate([x for w in l for x in w.split()]) if x == word]

最短的一个:

' '.join(l).split().index('1word2')

答案 1 :(得分:1)

您需要做的就是正确嵌套发电机:

>>> sentences = ['0word0 0word1 0word2', '1word0 1word1 1word2', '2word0 2word1']
>>> all_words = [w for words in sentences for w in words.split()]
>>> all_words
['0word0', '0word1', '0word2', '1word0', '1word1', '1word2', '2word0', '2word1']
>>> all_words.index('1word1')
4

或者如果你想用迭代器(也许你正在处理许多长字符串或其他东西),你可以尝试使用chain函数(我的新个人收藏)。

答案 2 :(得分:0)

我认为你的意思是:

def GetWordPosition(lst, word):
    if not word in lst:
        return -1

    index = lst.index(word)
    position = 0
    for i in xrange(index):
        position += len(lst[i])

    return position

答案 3 :(得分:0)

以下是基于迭代解决方案的替代答案:

def find_in_sentences(find_me, sentences):
    i = 0
    for sentence in sentences:
        words = sentences.split()
        if find_me in words:
            return words.index(find_me) + i
        else:
            i += len(words)
    return False

不像发电机一样漂亮,但它可以做到这一切,而无需构建一个很长的列表。

答案 4 :(得分:-1)

使用string.find,可以在文档here中查看。

l = ['0word0 0word1 0word2', '1word0 1word1 1word2', '2word0 2word1']
index = l[0].find('0word2')