对于python中的循环来检查列表中的元素

时间:2018-03-09 18:30:47

标签: python python-3.x

我有这段代码:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QStatusBar, QLabel


class MainWindow(QMainWindow):

    def __init__(self):
        QMainWindow.__init__(self)

        statusBar = QStatusBar()

        statusBar.setStyleSheet('QStatusBar::item {border: None;}')

        self.setStatusBar(statusBar)
        statusBar.addPermanentWidget(QLabel("Label: "))
        statusBar.addPermanentWidget(QLabel("Data"))


app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

我收到此输出keys = ['well done','come on','going to','c','D','m','l','o'] values = ['well','going','come','D'] category = [] for index, i in enumerate(keys): for j in values: if j in i: category.append(j) break if index == len(category): category.append("other") print(category)

预期输出为['well', 'other', 'come', 'going', 'other', 'D', 'other', 'other']

我不确定代码有什么问题。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

根据更新的问题,很难判断每个关键元素中的第一个单词是否为值中的单词。这个例子太宽泛了,所以我考虑了这个并更新了我的答案。

category = []
keys = ['start', 'steak well done', 'come on', 'He is going', 'c', 'D', 'm', 'l', 'o']
values = ['well', 'going', 'come', 'D']

for key in keys:
    if ' ' in key:
        for value in values:
            if value in key:
                category.append(value)
        continue
    if key in values:
        category.append (key)
        continue
    else:
        category.append ('other')

category
['other', 'well', 'come', 'going', 'other', 'D', 'other', 'other', 'other']

答案 1 :(得分:0)

我会用一个标记是否找到它的标志来解决这个问题。

请注意,我在您的按键名称和值列表之间进行了切换,以便更好地符合逻辑并更改了“我”。和' j'为了更好的名称意义。

如果您愿意,可以保留自己的姓名,只添加关于“找到”的两行。

values = ['well done', 'come on', 'going to', 'c', 'D', 'm', 'l', 'o']
keys = ['well', 'going', 'come', 'D']
category = []
for index, value in enumerate(values):
    found = False
    for key in keys:
        if key in value:
            category.append(key)
            found = True
            break
    if not found:
        category.append("other")
print(category)

选项2:

values = ['well done', 'come on', 'going to', 'c', 'D', 'm', 'l', 'o']
keys = ['well', 'going', 'come', 'D']
category = []
for index, value in enumerate(values):
    for key in keys:
        if key in value:
            category.append(key)
            break
    else:
        category.append("other")
print(category)

在我看来,选项2是一种更优雅的解决方案。如果else循环结束而未在途中遇到for,则会for之后触发break {/ 1}}。

打印:['well', 'come', 'going', 'other', 'D', 'other', 'other', 'other']

关于你做错了什么 - 你正在添加'其他'在浏览您的密钥列表时,而不是通过您的“价值观”。列表。