【发布时间】:2021-11-24 19:51:04
【问题描述】:
我正在从文件名中提取“学科”,其中一些是相同的。有没有办法将它们合并为只出现一次?
# ------ Houdini
if CIOXO_SOFTWARE == "houdini":
for filesHoudini in os.listdir(filesPath):
if filesHoudini.endswith(houdiniExtension):
# ------ Extract discipline from filename
filesDiscipline = filesHoudini.upper().split("_")[3]
# ------ Add delimiter for categories to list
delimiter = QtWidgets.QListWidgetItem()
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/icons/.graphics/.icons/chevronDown.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
font = QtGui.QFont()
font.setBold(True)
delimiter.setIcon(icon)
delimiter.setText(filesDiscipline)
delimiter.setFont(font)
delimiter.setFlags(QtCore.Qt.NoItemFlags)
self.ui.listFilesSequences.addItem(delimiter)
# Add houdini files to list
self.ui.listFilesSequences.addItems(filesHoudini.split())
这是程序中的结果:
【问题讨论】:
-
嗨,欢迎来到 SO。请尝试创建一个minimum reproducable example,向我们展示您面临的确切问题是什么。理想情况下,删除与问题不直接相关的所有内容(所有 GUI / 字体 / 图标等),准确描述输入的格式,准确的输出,以及解决问题的尝试到目前为止的问题(你尝试了什么/什么有效/什么没有)。
-
对于它的价值,我建议查看sets。将所有字符串放入一个集合然后加入它会给您一个没有重复值的字符串,这听起来很像您所追求的。
-
在 for 循环之前,创建一个集合来保存已经看到的“学科”(例如
seen = set())。然后在 for 循环中使用它,如下所示:if filesDiscipline not in seen: seen.add(filesDiscipline); else: continue。这将跳过以前见过的任何“学科”。 -
@ekhumoro
if-test 是多余的。所需要的只是调用seen.add(),因为使用相同的值调用它两次与调用它一次具有相同的效果。 -
@BoarGules if-test 决定是否继续(注意 else 子句),所以肯定不是多余的。
标签: python string merge pyside2