使用 if else 条件列出理解 - Python

List comprehension with if else conditions - Python

所以我一直在试图弄清楚如何将此代码中的主 for 循环转换为列表理解以提高效率,我看过一些示例,但 none 似乎可以满足对于这种情况。感谢您的帮助!

key = 'abcdefghij'

def getChunks(key):
    ''' Dividing the key into byte sized chunks'''
    currVal = ''
    remainder = ''
    chunks = []
    currVal = ''


    for char in key:
        if len(currVal) == 8:
            chunks.append(currVal)
            currVal = hex(ord(char))[2:]
        else:
            currVal += hex(ord(char))[2:]

    if len(currVal) == 8:
        chunks.append(currVal)
    elif currVal:
        remainder = currVal

    return (chunks, remainder)


print(getChunks(key))

所需的输出将输入 string/key 分成字节大小的十六进制值块 + 以下格式的任何余数

>> (['61626364', '65666768'], '696a')

哦还有这个:

for i in range(1, self.hashCount+1): 
    h = hash(item, i) % self.bitArraySize # Generate Hash

    # set the bit True in bit_array 
    self.bitArray[h] = True

for i in range(1, self.hashCount+1): 
            h = hash(item, i) % self.bitArraySize 
            if self.bitArray[h] == False:
                return False

None 其中应该是列表理解。列表理解不应有副作用(它们是函数式编程构造,违反函数式编程预期会导致 unmaintainable/unreadable 代码)。在所有情况下,您的循环不 只是 按顺序逐个元素构建新的 list,它们还在进行状态更改 and/or 构建 list 乱序。

旁注:if self.bitArray[h] == False: 是一种较慢的、非 Python 的拼写方式 if not self.bitArray[h]:;根据 the PEP8 style guide:

,与 TrueFalse 进行比较几乎总是错误的方法

Don't compare boolean values to True or False using ==:

 # Correct:
 if greeting:

 # Wrong:
 if greeting == True:

对于问题 #1

key = 'abcdefghij'

def getChunks(key):
    ''' Dividing the key into byte sized chunks'''
    hex_string = key.encode().hex()
    length = len(hex_string)
    sep = length%8
    return [hex_string[i:i+8] for i in range(0, length-sep, 8)], hex_string[-sep:] if sep !=0 else ''

print(getChunks(key))