求集与积分的交集

2024-04-20 13:39:46 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我道歉,我是一个极端的初学者,所以我可能会听起来无知。你知道吗

我有5个单词集。其中4个是通过csv导入的,另一个是通过用户输入创建的。我想找出输入集和其他集的交集。然后根据有多少个十字路口来奖励积分。你知道吗

例如,我想找出“set\u 1”和“input\u set”之间的交集。对于每个交叉口,用户评分加1。然后,找到“set\u 2”和“input\u set”之间的交集,并为这些交集中的每个交集添加2到用户\u分数。以此类推,每个交叉口增加4个。你知道吗

我会使用if循环还是for循环?你知道吗

像这样的?你知道吗

user_score = 0

for x in intersect(input_set, set_1):
    user_score += 1
for x in intersect(input_set, set_2):
    user_score += 2
for x in intersect(input_set, set_3):
    user_score += 3
for x in intersect(input_set, set_4):
    user_score += 4

或者像这样?你知道吗

if intersect(input_set, set_1):
    user_score += 1
elif intersect(input_set, set_2):
    user_score += 2
elif intersect(input_set, set_3):
    user_score += 3
elif intersect(input_set, set_4):
    user_score += 4

还是我走远了?感谢您的帮助。谢谢!你知道吗


Tags: csv用户inforinputif评分单词
1条回答
网友
1楼 · 发布于 2024-04-20 13:39:46

这是:

for intersect(input_set, set_1):

…不是循环的工作方式。您需要一个循环变量,如下所示:

for thing_in_both_sets in intersect(input_set, set_1):
    user_score += 1

如果你不在乎“东西”是什么,你可以称之为_。这没有任何特殊的含义,但通常意味着它是一个无用的虚拟变量:

for _ in intersect(input_set, set_1):
    user_score += 1

同时,如果您使用的是内置的set类型,则没有名为intersect的函数,但有一个名为intersection的方法,您可以这样使用:

for _ in input_set.intersection(set_1):

也可以将其拼写为&运算符。你知道吗


但是,如果你仔细想想,有一种更快的方法可以做到这一点:不要循环,只要得到交叉点的len。所以:

user_score += len(input_set & set_1)
user_score += len(input_set & set_2) * 2
# etc.

最后一个改进:与其为四个集合设置四个独立的变量,为什么不只设置一个集合列表呢?您是否也有四个复制和粘贴的代码块略有变化,以创建单独的变量?如果是这样,就把他们赶走。然后你可以这样做:

user_score = 0
for multiplier, user_set in enumerate(user_sets, 1):
    user_score += len(input_set & user_set) * multiplier

即使有单独的变量,也可以随时创建user_set,如下所示:

user_sets = (set_1, set_2, set_3, set_4)

不过,最好是一开始就有一个集合列表,而不是四个独立的变量。关于这方面的更多讨论,请参见this blog postthis one。你知道吗

相关问题 更多 >