Вы можете использовать collections.Counter
для подсчета вхождений последних элементов:
from collections import Counter
last = Counter([i[-1] for i in a])
# Counter({7: 1, 9: 2, 12: 2})
И затем посчитать, сколько из них больше, чем 1
:
sum(1 for k,v in last.items() if v>1)
# 2
Я предполагаю, что картирование - это структура? Если это так, вы можете иметь две версии прототипа FILES_GetMemoryMapping ()
с разными сигнатурами. Для второй перегрузки, в которой вы хотите передать null
, задайте для параметра IntPtr
и используйте IntPtr.Zero
public static extern uint FILES_GetMemoryMapping(
[MarshalAs(UnmanagedType.LPStr)] string pPathFile,
out ushort Size,
[MarshalAs(UnmanagedType.LPStr)] string MapName,
out ushort PacketSize,
IntPtr oMapping,
out byte PagesPerSector);
Пример вызова:
FILES_GetMemoryMapping(MapFile, out size, MapName,
out PacketSize, IntPtr.Zero, out PagePerSector);
Если на самом деле Mapping является класс вместо структуры, просто установите значение в ноль, прежде чем передавать его вниз.
Причина, по которой вы не можете передать ноль
, заключается в том, что параметр ref
с особой обработкой компилятором C #. Любой параметр ref
должен быть ссылкой, которую можно передать функции, которую вы вызываете. Так как вы хотите передать null
, компилятор отказывается разрешить это, так как вы не предоставляете ссылку, которую ожидает функция.
Ваша единственная реальная возможность - создать локальную переменную, set это к null
, и передать это. Компилятор не позволит вам сделать намного больше.
Один из способов - создать фиктивную переменную, присвоить ей значение NULL и передать ее.
Mapping oMapping = null;
FILES_GetMemoryMapping(MapFile, out size, MapName, out PacketSize, ref oMapping, out PagePerSector);