对于循环python,最后一个值未添加到列表中

时间:2017-11-25 04:48:42

标签: python python-3.x list for-loop

选项卡中未添加最后一个值。 所以我创建了一个程序来测试字符串是否包含在其他字符串上。它有效,但最后一个值没有注意。 结果:

result: ['testing', 'toto', 'trete'] 
what expected: ['testing', 'toto', 'trete','apoi']

str= ("""test
testing
toto
trete
apoi""")

tab = str.splitlines()
tabmot = []

mot = ""
for i in range(len(tab)):
  print(int(tab[i])
  if mot in tab[i]:
    mot = tab[i]
  else:
    if mot != "":
        tabmot.append(mot)
    elif tab[i] == tab[-1]:
        tabmot.append(tab[i])
    mot = tab[i]

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试从测试字符串创建一个新的唯一字符串列表。如果这是你的意图,那么这段代码将不起作用。如果那不是您的意图,那么请在本文末尾看到解决方案,否则继续阅读。

'mot'存储上一次迭代,然后与'tab'列表中的下一个元素进行比较。现在假设,如果您的输入字符串是“测试trete apoi”,那么您不会将“test”与“testing”进行比较。您的代码将导致['test','toto','testing','trete',' apoi']。因此,它没有按照它应该的方式工作。一个基本的解决方案可以通过两个循环来实现,如下所示:

user.saveSubscriber = (jSubscriberData, fCallback) => {
    var jSubscriber = {
        email: jSubscriberData.txtEmail,
        firstName: jSubscriberData.txtName,
        lastName: jSubscriberData.txtLastName,
        address: {
            type: "Point",
            coordinates: [jSubscriberData.lng, jSubscriberData.lat]
        }
    }
    global.db.collection('subscribers').insertOne(jSubscriber, (err, jResult) => {

        if (err) {
            var jError = { "status": "error", "message": "ERROR -> saveSubscriber -> user.js -> 001" }
            return fCallback(false, jError)
        }
        var jOk = { "status": "ok", "message": "user.js ->  subscriber saved -> 000" }
        return fCallback(false, jOk)
    })
}

您的帖子解决方案可以通过以下方式实现:

str= ("""test testing toto trete apoi""")
tab = str.split()
tabmot = []
mot = ""
for i in range(len(tab)):
   mot = tab[i]
   for j in range(i+1, len(tab)-1):
       if(mot in tab[j]):
          if(len(mot) < len(tab[j])):
             mot = tab[j]
   if(mot not in tabmot):
      tabmot.append(mot)
print(tabmot)

希望,这会有所帮助!

p.s:顺便说一句,你可以让它变得更加pythonic。