【问题标题】:Conditional check for strings not giving the behavior I expect有条件地检查没有给出我期望的行为的字符串
【发布时间】:2018-10-10 20:03:30
【问题描述】:

我有一个 SQLite 数据库,我正在使用 Python 读取数据。我连接到数据库,然后将整个评论列存储到一个名为输出的列表中。列表中的每个条目都是一个字符串,我想隔离列表中仅包含字符串“[已删除]”的条目。

为此,我使用循环来索引列表,然后对于每个点,我将索引 i 处的字符串与字符串 '[deleted]' 进行比较,如果字符串是 '[deleted]',则应设置在称为已删除标志的零向量中索引 i 处的对应值 1。我使用的代码如下:

deletedFlag = np.zeros((len(output),1))
for i in range(0,len(output)):
        if (output[i] == "[deleted]"):
            deletedFlag[i] = 1

问题是 output[i] == '[deleted]' 永远不会返回 true,因此永远不会设置相应的 deletedFlag[i] = 1

进一步调查并将 output[i] 打印到控制台以获取我知道包含“[deleted]”字符串的 i 值,返回的字符串与我预期的略有不同:

>> print(output[3])
>> ('[deleted]',)

但是,即使我将字符串比较更改为与打印的值相同,我仍然会得到与 deleteFlag 向量相同的行为:

deletedFlag = np.zeros((len(output),1))
for i in range(0,len(output)):
        if (output[i] == "('[deleted]',)"):
            deletedFlag[i] = 1

使用 DB Browser 查看前四个数据库条目显示以下截取自屏幕截图的内容,它是我试图识别的评论列的第 4 行:

我认为我只是在进行字符串比较错误,但对于我的生活,我无法弄清楚它应该是什么,我已经尝试了我能想到的大多数括号和引号的排列。我知道这可能是一个非常基本的问题,但我们将不胜感激任何帮助!

【问题讨论】:

  • 再次检查返回值。它实际上是一个字符串吗?它也可以是一个以'[deleted]' 作为第一个元素的元组。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。
  • 谢谢,是的,你是对的,它是元组。我将用一个工作示例和解决方案更新问题,以便更容易理解

标签: python database python-3.x sqlite


【解决方案1】:

嗯...打印的output[3] 有点像一个半满的元组。因此,您可能需要改为检查 output[i][0]

另外,我建议使用 __contains 来进行字符串比较,您不需要写 range(0,n):默认情况下它从零开始,所以一个简单的 range(n) 会做完全相同的事情;>

deletedFlag = np.zeros((len(output),1))
for i in range(len(output)):
    if output[i][0].__contains("deleted"):
        deletedFlag[i] = 1

【讨论】:

  • 谢谢,是的,问题在于它是元组,通过使用 output[i][0] 可以正常工作。感谢其他指点!
猜你喜欢
  • 2019-08-03
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 2021-12-29
相关资源
最近更新 更多