我有这个清单:
box = ["apple","orange","banana", "water"]
还有这个字符串:
CheckList = "1, orange | 2, apple | 3, banana | 4, milk"
注意:字符串有"|"
和","
分隔符。|
分隔符分隔每个项目,,
分隔符分隔项目及其键(即key
、item
、|
、key
、item
等)
问题:
我想遍历box
列表中的每个项目,并在字符串CheckList
中找到coresbindingkey
。你知道吗
输出应如下所示:
foundItems = ["2","1","3", "water"]
我是一个乞丐,对文本处理和编程一般,有什么想法如何解决这个问题?你知道吗
我试过了,但没用。你知道吗
for i in CheckList.split("|"):
for j in box:
if i.split(",")[0] == j
如果
CheckList
中的空格不一致(实际上它们不在您给出的示例中),我建议首先运行CheckList = CheckList.replace(" ","")
来消除所有空格。否则一定要使用" | "
或", "
。你知道吗除此之外,您的代码应该可以正常工作。如果您使用
foundItems = box.copy()
初始化,那么您的循环可以如下所示使用
j in range(len(box))
而不是j in box
意味着很容易访问foundItems
的相应元素。你知道吗首先,从
CheckList
获取映射,然后从box
查找它:注意字符串中的空格。你知道吗
首先,看起来您在
i.split(",")
中检查了错误的索引。Python是0索引的,所以当您引用i.split(",")[0]
时,您检查的是逗号的左侧(本例中的键),而您似乎希望它检查右侧(水果)。你知道吗其次, 在解析这样的字符串时,请确保去掉了空格。例如,清单中的第一项是“1,橙色”。当您在“,”上拆分时,会得到一个由
["1"," orange "]
组成的数组。注意橙色字符串前后的空格。如果你试着比较"orange"
和" orange "
,你会发现它们并不相等。您可以调用i.split(",")[1].strip()
删除任何前导和尾随空格。你知道吗最后,这个功能不是很有效。当您在另一个for循环中有一个for循环时,您正在检查CheckList中的每个元素以及box中的每个元素。这是O(n^2)复杂性。对于4个项目来说,这不是什么大不了的事情,但是如果这些列表更大,时间会很快增加。下面是如何编写此函数:
相关问题 更多 >
编程相关推荐