传递列表时的TypeError(Python)

时间:2013-01-29 00:19:50

标签: python list list-comprehension

代码:

import itertools
import string
import hashlib

def hash_f(x):
    h = hashlib.md5(x)
    return int(h.hexdigest(),base=16)


value = raw_input("Enter a value: ")
oneChar = [map(''.join, itertools.product(string.ascii_lowercase, repeat=1))]
twoChar = [map(''.join, itertools.product(string.ascii_lowercase, repeat=2))]
threeChar = [map(''.join, itertools.product(string.ascii_lowercase, repeat=3))]
possibleValues = oneChar + twoChar + threeChar

hashed_list = [int(hashlib.md5(x).hexdigest(), base=16) for x in possibleValues]

for x in hashed_list:
    if hash_f(value) == x:
        print "MATCH"

我尝试运行此代码时收到的错误如下:

Traceback (most recent call last):
    File "hash.py", line 18, in <module>
        hashed_list = [int(hashlib.md5(x).hexdigest(), base=16) for x in possibleValues]
TypeError: must be string or buffer, not list

在我的脑海中经历这一点,我能看到的唯一问题是hashlib的错误,但是由于我在可能的值中循环遍历每个单独的值,所以不应该被否定吗?

非常感谢所有人的帮助!

2 个答案:

答案 0 :(得分:5)

地图的输出已经是一个列表,您的意思是使用:

oneChar = map(''.join, itertools.product(string.ascii_lowercase, repeat=1))
twoChar = map(''.join, itertools.product(string.ascii_lowercase, repeat=2))
threeChar = map(''.join, itertools.product(string.ascii_lowercase, repeat=3))

答案 1 :(得分:0)

possibleValues是一个列表列表。删除地图调用周围的[]以获取一个字符串列表:

oneChar = map(''.join, itertools.product(string.ascii_lowercase, repeat=1))
twoChar = map(''.join, itertools.product(string.ascii_lowercase, repeat=2))
threeChar = map(''.join, itertools.product(string.ascii_lowercase, repeat=3))