Python - Counter将列表中的元素合并在一起

时间:2017-07-22 14:52:15

标签: python

我有一个完整的Windows API调用列表:

 listOfSequences = 
    ['GetSystemDirectoryA',
     'IsDBCSLeadByte',
     'LocalAlloc',
     'CreateSemaphoreW',
     'CreateSemaphoreA',
     'GlobalAddAtomW',
     'lstrcpynW',
     'LoadLibraryExW',
     'SearchPathW',
     'CreateFileW',
     'CreateFileMappingW',
     'MapViewOfFileEx',
     'GetSystemMetrics',
     'RegisterClipboardFormatW',
     'SystemParametersInfoW',
     'GetDC',
     'GetDeviceCaps',
     'ReleaseDC', ...... and so on .....]

由于其中一些发生了几次,我想收集它们的出现次数。因此,我使用了collections.Counter。 但它将一些API连接在一起:

lCountedAPIs = Counter(listOfSequences)

当我打印 lCountedAPIs 时,我得到了以下信息:

Counter({'IsRectEmptyLocalAlloc': 2,
         'DdePostAdvise': 3,
         'DispatchMessageWGetModuleFileNameA': 2,
         'FindResourceExW': 50318,
         'ReleaseDCGetModuleFileNameW': 7,
         'DefWindowProcAGetThreadLocale': 1,
         'CoGetCallContext': 40,
         'CoGetTreatAsClassGetCommandLineA': 1,
         'GetForegroundWindowGetSystemDirectoryW': 1,
         'GetModuleHandleWGetSystemTimeAsFileTime': 2,
         'WaitForSingleObjectExIsChild': 1,
         'LoadIconAGetWindowsDirectoryW': 2,
         'GlobalFreeLocalAlloc': 10,
         'GetMapModeCreateSemaphoreW': 1,
         'HeapLock': 11494,                  <---------- A
         'CharNextAGetCurrentProcessId': 11, <---------- B
         'RemovePropWGetStartupInfoA': 1,
         'GetTickCountGetVersionExW': 55,

因此,例如: HeapLock (参见A)未与其他API合并 但 CharNextA GetCurrentProcessId 连接(见B)

有人可以告诉我为什么会这样,以及如何解决这个问题?

谢谢你的提议&amp;最好的问候:)

2 个答案:

答案 0 :(得分:4)

检查列表定义。 Python连接相邻的字符串文字,因此你必须错过中间某处的逗号:

listOfSequences = [
    'GetSystemDirectoryA',
    'IsDBCSLeadByte',
    'LocalAlloc',
    ...
    'CharNextA'
    #          ^ comma missing here
    'GetCurrentProcessId',
    ...
]

这几次咬了我。

答案 1 :(得分:1)

Counter中没有任何内容可以做到这一点。您必须在'CharNextAGetCurrentProcessId'中出现11次listOfSequences次。您可以通过运行'CharNextAGetCurrentProcessId' in listOfSequences来查看此内容。