微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

比较列表的最有效方法 Python

如何解决比较列表的最有效方法 Python

如何将列表相互比较。我希望比较两个列表的第一个 - 第四个数字。 我知道能够做到 if list[1] == list[1]: 但我认为有更有效的方法来完成它。谢谢你。我不想比较整个列表,只是将一个列表的 x 部分与另一个列表的 x 部分进行比较

import random
import replit
import numpy
import time
number = 0
answer = 0
guesses = 0
x = 0
useranswer = []
generated = []
for i in range (0,4):
  num = random.randrange(1,9)
  generated.append(num)
replit.clear()
print("---------------------------------------------------------------------\nWelcome to MASTERMIND! you must guess the number that was generated!\n---------------------------------------------------------------------\n")
def useranswer():
  answer = str(input("Select a 4 digit number: "))
  if len(answer) != 4:
    print("Invalid answer type")
    time.sleep(999999999)
    answer = ' '
  else:
    useranswer = list((str(answer)))
  
  
if useranswer == generated:
  print("Good job! You became the MASTERMIND in one turn!")
else: 
  while useranswer != generated:
    useranswer()
    guesses +=1
    if useranswer == generated:
      print("You have become the mastermind in " + guesses + " tries!")
    else:
      c = numpy.intersect1d(useranswer,generated,return_indices=True)[1]
      print("You got " + c + " correct! ")```

解决方法

您始终可以使用列表切片比较列表之间指定范围的项目

a = [1,2,3,4,7,8]
b = [1,5,6]
a[:3] == b[:3]

如果匹配,以上将产生 True

如果您想返回两个列表之间公共元素的索引,有一个名为 Numpy 的库,它具有强大的功能,可以高效地完成这些工作。

import numpy
a = [1,4]
b = [0,6,2]
_,c,d = numpy.intersect1d(a,b,return_indices=True)

这将返回以下索引:

print(c)
print(d)
array([0,1,3]
array([0,1])

但是你的问题的答案:

import random
import replit
import copy
import numpy
import time
number = 0
answer = 0
guesses = 0
x = 0
useranswer = []
generated = []
for i in range (0,4):
    num = random.randrange(1,9)
    generated.append(num)
replit.clear()
print("---------------------------------------------------------------------\nWelcome to MASTERMIND! you must guess the number that was generated!\n---------------------------------------------------------------------\n")
def useranswer_func():
    answer = str(input("Select a 4 digit number: "))
    if len(answer) != 4:
        print("Invalid answer type")
        time.sleep(9)  # The time provided by you is too much to wait!
        answer = ' '
    else:
        useranswer = list(answer)
        # You need to return values to use them outside the function.
        # Also your generated has int values but useranswer have str. So convert them to int or else they would never compare!
        return [int(i) for i in useranswer] 


if useranswer == generated:
      print("Good job! You became the MASTERMIND in one turn!")
else: 
    while useranswer != generated:
        # The returned values need to be stored in a variable.
        # Never use function name and variable name same. That could cause the error that you posted in the comment!
        useranswer = useranswer_func()
        guesses += 1
        if useranswer == generated:
            print("You have become the mastermind in " + str(guesses) + " tries!")
        else:
            c = []
            temp = copy.deepcopy(generated) # So that the change you make in temp is not reflected in generated variable too.
            for i in range(len(generated)):
                if generated[i] == useranswer[i]:
                    c.append(temp.index(temp[i]))
                temp[i] = None # If your generated has repeated values,the index returned will be different or else it would be always same.

            print("You got " + str(c) + " correct! ")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。