Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查列表中的字符串_Python_For Loop - Fatal编程技术网

Python 如何检查列表中的字符串

Python 如何检查列表中的字符串,python,for-loop,Python,For Loop,我有一个字符串: a = "sky high" 以及我已打开并转换为列表的csv样式的文件: mylist = [["sky high",'77'],["sky high and high",'88']] 我想检查字符串是否存在于每个列表的第一个位置。但是,如果我这样做: for row in mylist: if a in row[0]: print row[1] 它将给我结果7788,而不仅仅是77。我不知道为什么不能使用ifa==row[0],因为它不会产生任何

我有一个字符串:

a = "sky high"
以及我已打开并转换为列表的csv样式的文件:

mylist = [["sky high",'77'],["sky high and high",'88']]
我想检查字符串是否存在于每个列表的第一个位置。但是,如果我这样做:

for row in mylist:
    if a in row[0]:
       print row[1]
它将给我结果
7788
,而不仅仅是
77
。我不知道为什么不能使用if
a==row[0]
,因为它不会产生任何结果。你知道怎么办吗

编辑:

实际上,我的代码如下所示:

data = open("text.qrel",'rb')
new = []
for row in data:
    d = row[:-1].split(',')

    if a == d[0]:
       new.append(d[1])
sky high , 77

但它不起作用

您询问的是字符串是否在每行的第一个字符串中,而不是字符串是否在该行中。此代码应执行您想要的操作:

for row in mylist:
    if a == row[0]:
       print row[1]

这只输出
77

您询问的字符串是否位于每行的第一个字符串中,而不是该字符串是否位于该行中。此代码应执行您想要的操作:

for row in mylist:
    if a == row[0]:
       print row[1]

这只输出
77

请尝试通过交互式可视化工具运行它,如。当你因为某种原因不能这样做时,至少试着在普通的交互式解释器中进行实验,或者在你的程序中打印中间结果


a
是“天高”,而
[“天高”,“88']
时,这意味着
行[0]
行[0]
中的
a是
真的

这就是为什么(如果您将其修复为使用
[1]
而不是
[2]
),它将同时打印
77
88

在交互式解释器(或可视化工具)上尝试以下操作:


同时,您会说“如果a==行[0]
,我不知道为什么不能使用
,因为它不会产生任何结果。”

但是如果使用
a==行[0]
则不会产生任何结果;它将产生
77

在交互式解释器(或在线可视化工具)中尝试以下操作:

因此,代码的其他部分中肯定有bug。向我们展示您声称不起作用的版本,我们就能找到bug


最有可能的是,实际代码的问题在于
(或者实际上是
d
)实际上不是
[“天高”,“77']
,而是包含额外字符的内容:

data = open("text.qrel",'rb')
new = []
for row in data:
    d = row[:-1].split(',')
比如说
text.qrel
看起来像这样:

data = open("text.qrel",'rb')
new = []
for row in data:
    d = row[:-1].split(',')

    if a == d[0]:
       new.append(d[1])
sky high , 77
这将使
d[0]
成为
“天高”
(带空格),而不是
“天高”

或:

那么
d[0]
将是
“天高”
(加上额外的引号),而不是
“天高”

您可以向我们展示该CSV文件的摘录,或者让您的代码打印出每一行,并向我们展示它打印的内容;否则,我们只是猜测

您可以尝试手动修复问题。例如,要处理上述两种情况,请执行以下操作:

d = row[:-1].split(',')
…你会这样做:

def remove_quotes(x):
    if x[0] == '"' and x[-1] == '"': return x[1:-1]
    elif x[0] == "'" and x[-1] == "'": return x[1:-1]
    else: return x
for row in data:
    d = [remove_quotes(col.strip()) for col in row[:-1].split(',')]
如果您不理解列表的理解,请执行以下命令:

d = [remove_quotes(col.strip()) for col in row[:-1].split(',')]
…是实现以下目标的快捷方式:

d = []
for col in row[:-1].split(','):
    d.append(remove_quotes(col.strip())
您已经有了
[:-1]
来删除尾随的
\n
拆分(',')
来拆分为两列。但是,在每一列上,我都调用
strip()
来删除边缘的任何额外空白(这在您的特定情况下并不重要,但在CSV中这是一个常见问题),然后在结果上调用
remove_quotes
,删除任何匹配的引号对,并将其用作列值

正如你所看到的,这既乏味又复杂

而且还有很多普通案件它无法处理

这正是您通常希望使用而不是自己尝试解析CSV文件的原因:

for d in csv.reader(data):
现在,
d[0]
将成为
“天高”


如果您的CSV文件不太“标准”——不足以让CSV开箱即用,您可以给
阅读器提供一个方言对象,或者只是一些格式参数,这通常比自己从头开始构建要容易。

尝试通过交互式可视化工具运行它,如。当你因为某种原因不能这样做时,至少试着在普通的交互式解释器中进行实验,或者在你的程序中打印中间结果


a
是“天高”,而
[“天高”,“88']
时,这意味着
行[0]
行[0]
中的
a是
真的

这就是为什么(如果您将其修复为使用
[1]
而不是
[2]
),它将同时打印
77
88

在交互式解释器(或可视化工具)上尝试以下操作:


同时,您会说“如果a==行[0]
,我不知道为什么不能使用
,因为它不会产生任何结果。”

但是如果使用
a==行[0]
则不会产生任何结果;它将产生
77

在交互式解释器(或在线可视化工具)中尝试以下操作:

因此,代码的其他部分中肯定有bug。向我们展示您声称不起作用的版本,我们就能找到bug


最有可能的是,实际代码的问题在于
(或者实际上是
d
)实际上不是
[“天高”,“77']
,而是包含额外字符的内容:

data = open("text.qrel",'rb')
new = []
for row in data:
    d = row[:-1].split(',')
比如说
text.qrel
看起来像这样:

data = open("text.qrel",'rb')
new = []
for row in data:
    d = row[:-1].split(',')

    if a == d[0]:
       new.append(d[1])
sky high , 77
这将使
d[0]
成为
“天高”
(带空格),而不是
“天高”

或:

那么
d[0]
将是
“天高”
(加上额外的引号),而不是
“天高”

您可以向我们展示该CSV文件的摘录,或者让您的代码打印出每一行,并向我们展示它打印的内容;否则,我们只是猜测

您可以尝试手动修复问题。例如,要处理上述两种情况,请执行以下操作:

d = row[:-1].split(',')
…你会这样做:

def remove_quotes(x):
    if x[0] == '"' and x[-1] == '"': return x[1:-1]
    elif x[0] == "'" and x[-1] == "'": return x[1:-1]
    else: return x
for row in data:
    d = [remove_quotes(col.strip()) for col in row[:-1].split(',')]
如果您不理解列表的理解,请执行以下命令:

d = [remove_quotes(col.strip()) for col in row[:-1].split(',')]
…是实现以下目标的快捷方式:

d = []
for col in row[:-1].split(','):
    d.append(remove_quotes(col.strip())
您已经有
[:-1]
来删除尾随的
\n