python - 如果语句在For循环中,带有条件来执行else,只有当所有迭代都结束时

时间:2017-11-12 12:32:09

标签: python

我是python中的新手,我知道以下代码存在一些问题。

name = 'spider-man'
movies = []
movieframe = ['Spider-Man 3\xa0', 'The Amazing Spider-Man\xa0', 'Spider-Man 2\xa0', 'The Amazing Spider-Man 2\xa0', 'Spider-Man\xa0', 'Spider-Man: Homecoming\xa0']
for i in movieframe:
    if name.lower() == i.lower():
        movies.append(name)
        print('a', movies)

    else:
        movies.append(movieframe[0])
        print('b', movies)
        break

我想检查数据帧中是否存在确切的字符串,如果为true,则将其附加到另一个数据帧。但是在上面的for循环中,'else'正在第一次迭代后执行。

如何更正?

3 个答案:

答案 0 :(得分:2)

首先,您使用的是列表,而 Dataframe 则完全不同。

现在,你为什么要使用 \ xa0

\ xa0 实际上是Latin1中的不间断空格,而是使用u''或从movieframe中删除它们。

或者只是您可以使用name='spiderman\xa0'

您的答案错误,因为 \ xa0 name中不存在的其他字符。

name = 'spider-man\xa0'
movies = [] 
movieframe = ['Spider-Man 3\xa0', 'The Amazing Spider-Man\xa0', 'Spider-Man 
2\xa0', 'The Amazing Spider-Man 2\xa0', 'Spider-Man\xa0', 'Spider-Man: 
Homecoming\xa0']
for i in movieframe:
    if name.lower() == i.lower():
       movies.append(name)
       print('a', movies)
if len(movies)==0:
   movies.append(movieframe[0])
   print('b', movies)

答案 1 :(得分:0)

如果要附加到另一个数据帧,首先将其初始化,然后在循环中追加内容

示例:

movies = pd.DataFrame() ##### This will create a empty dataframe which can be appended into within the for loop.

或者,如果您的目的只是创建输出数据框,那么就像在代码中一样创建并附加到列表中。然后,一旦退出for循环,使用您在循环中创建的列表创建一个数据框

从您的代码中,它应该是:

movieDF = pd.DataFrame(movies) ##### movies is a list type

答案 2 :(得分:0)

你可以使用正则表达式:

name = 'spider-man'
movies = []
movieframe = ['Spider-Man 3\xa0', 'The Amazing Spider-Man\xa0', 'Spider-Man 2\xa0', 'The Amazing Spider-Man 2\xa0', 'Spider-Man\xa0', 'Spider-Man: Homecoming\xa0']
import re
movieframe = [x.lower() for x in movieframe]
for x in movieframe:
    if re.search("spider-man",x):
        movies.append(x)
print(movies)

['蜘蛛侠3 \ xa0','惊人的蜘蛛侠\ xa0','蜘蛛侠2 \ xa0','惊人的蜘蛛侠2 \ xa0','蜘蛛侠\ xa0' ,'蜘蛛侠:回家\ xa0']