为什么我在尝试比较两个列表时收到错误?

时间:2016-09-09 13:11:30

标签: python list python-3.x string-comparison list-comparison

我正在尝试比较行libraryDependencies += "net.sf.json-lib" % "json-lib" % "2.4" classifier "jdk15" 上的两个列表并返回找到的匹配项。

列表包含一个用户选择的号码(#12),其中一个是随机生成的(un)。

例如,rn[['1', '5', '3', '7']]会返回[['9', '6', '3', '2']]

我对python很新,并且正在使用找到的HERE解决方案,但我的代码还没有成功。

[3]

2 个答案:

答案 0 :(得分:1)

当您将列表来回转换为字符串时,结果将不是原始字符串。它将是一个包含原始字符串表示字符的列表。

>>> a = [1, 2, 3]
>>> b = str(a)
>>> c = list(b)
>>> c
['[', '1', ',', ' ', '2', ',', ' ', '3', ']']

不要进行此类投射,如果必须,请使用','.join(map(str, a))投射到字符串,然后list(map(int, b.split(',')))投射到列表。

答案 1 :(得分:1)

使用函数参数,而不是使用列表来传递数据。

import random
import re

def check(random_number, user_number):
    print('random_number {}, user_number {}'.format(random_number, user_number))
    x = set(random_number).intersection(user_number)
    print(x)

def numval():
    random_num = str(random.choice(range(1000, 9999)))
    while True:
        user_num = (input("Please enter a 4 digit number: "))
        if re.match("^[0-9]{4,4}$", user_num):
            check(random_num, user_num)
            break

numval()

这可以避免访问函数中的全局变量,并且通常更具可读性。这样做我就能删除函数numsys(),因为它所做的只是不必要地摆弄全局变量,以便在函数check()中访问它们的值。

一个简化是将随机数和用户数保持为字符串。 set()可以在字符串上调用,而不需要先将其转换为列表。如果您使用set.intersection()而不是&运算符,则只需将其中一个字符串显式转换为集合。

我还冒昧地重命名变量以符合PEP8 style guide