如何让索引读取整个列表?

时间:2017-02-04 06:02:43

标签: python list

我正在为我的Python课程开展一个项目,而且我对编码一般都很陌生。我的代码片段之一出现问题。我试图让Python找到单词的每个实例"" (或任何输入词真的,它并不重要。)并在它之后立即返回。我能够在""之后返回单词,但是当我需要它来扫描整个列表时它会在一个实例后停止。

这是我的代码:

the_list=['the']
animal_list=['the', 'cat', 'the', 'dog', 'the', 'axolotl']

for the_list in animal_list:
    nextword=animal_list[animal_list.index("the")+1]
    continue

print(nextword)

我返回的所有内容都是cat,而dogaxolotl也会弹出。我尝试使用for循环和continue以使代码经历dogaxolotl的相同过程,但它没有用。

7 个答案:

答案 0 :(得分:0)

我不清楚你要求的是什么,但我认为你想要的是获取列表animal_list中的动物,并假设'the'这个词在偶数中,你可以用这个;

animals = [animal for animal in animal_list if animal != 'the']

由于您是初学者,因此前面的代码使用了一种理解,这是一种在没有for循环的情况下迭代循环的pythonic方法,使用for循环的前一代码的等效代码是:

animals = []

for animal in animal_list:
    if animal != 'the':
        animals.append(animal)

答案 1 :(得分:0)

索引只会获得第一个实例。 典型的pythonic方式是使用列表理解:

[animal_list[i+1] for i,val in enumerate(animal_list) if val=='the']

答案 2 :(得分:0)

list.index只会找到第一个匹配项,但您可以指定startstop值来跳过其他索引。

现在我们还需要使用try/except阻止,因为如果找不到匹配项,list.index将会raise ValueError

animal_list=['the', 'cat', 'the', 'dog', 'the', 'axolotl']
match = 'the'

i = 0
while True:
    try:
        i = animal_list.index(match, i) + 1 # start search at index i
    except ValueError:
        break

    # can remove this check if certain that your list won't end with 'the'
    # otherwise could raise IndexError
    if i < len(animal_list):
        print(animal_list[i])

但是,如果您不必使用list.index,我建议您使用以下内容。 (同样可以删除检查列表是否不以'the'结尾。

for i, item in enumerate(animal_list):
    if item == match and i + 1 < len(animal_list):
        print(animal_list[i + 1])

或者更紧凑是使用列表理解。这将输出'the'之后所有项目的列表。

animals = [ animal_list[i + 1] for i, v in enumerate(animal_list)
            if v == match and i + 1 < len(animal_list) ]
print(animals)

注意:continue的使用不正确。当你想要结束循环的当前迭代并继续下一个循环时,使用continue。例如

for i in range(5):
    print(i)
    if i == 2:
        continue
    print(i)

# Output
0
0
1
1
2 # Notice only '2' is printed once
3
3
4
4

答案 3 :(得分:0)

试试这个:

the_list=['the']

animal_list=['the', 'cat', 'the', 'dog', 'the', 'axolotl']
i=0
for i in range(len(animal_list)):
    if animal_list[i] in the_list:
        nextword=animal_list[i+1]
        print nextword

答案 4 :(得分:0)

一种方法是将列表压缩到自身的移位版本:

keyword = 'the'
animal_list=['the', 'cat', 'the', 'dog', 'the', 'axolotl']
zipped = zip(animal_list, animal_list[1:])
# zipped contains [('the', 'cat'), ('cat', 'the'), ('the', 'dog') etc.]

found_words = [after for before, after in zipped if before == 'the']

这将处理一个以'the'结尾而不会引发错误的列表(最终'the'将被忽略)。

答案 5 :(得分:0)

这是一种非常UN-PYTHONIC的方式......但也许它会帮助你理解索引:

animal_list = ['the', 'cat', 'the', 'dog', 'the', 'axolotl']
index=0

for x in animal_list:
  if x == "the":
    print(animal_list[(index + 1)])
  index +=1

答案 6 :(得分:0)

the_word = 'the'
animal_list = ['the', 'cat', 'the', 'dog', 'the', 'axolotl']

# Iterate through animal_list by index, so it is easy to get the next element when we find the_word
for i in range(len(animal_list) - 1):
    if animal_list[i] == the_word:       # if the current word == the word we want to find
        print(animal_list[i+1])          # print the next word

我们不想检查animal_list中的最后一个元素。这就是我从animal_list的长度中减去1的原因。这样我的值将为0,1,2,3,4。