Вот еще одно решение с использованием filter()
:
def non_string(x):
return not isinstance(x, str)
print([tuple(filter(non_string, x)) for x in ListTuples])
# [(100,), (80,), (20,), (40,), (40,)]
Если Вы объявляете int array[variable]
память будет выделена на стеке, который не очень хорош для больших, относительно постоянных структур данных (такой как один, Вы могли бы хотеть возвратиться). Вам не нужно к свободной памяти вручную при использовании синтаксиса массива, так как это освобождено, когда это выходит из объема. calloc
с другой стороны, выделит память динамично во время выполнения на "куче". Необходимо будет освободить его сами, как только Вы закончены с ним.
Я соглашаюсь с ocdecio, что c89 не позволяет
int array[variable]
c99 позволяет некоторым типам переменных и выражений быть размером массива. Но в дополнение к этому, вещи, выделенные с malloc
и с помощью семейство можно изменить realloc
.
Поскольку
int array[variable];
не допустимо в стандарте C - можно только определить длину массива с константой. (такие как Ваш
char name[] = "Nick";
пример, который не является переменной длиной).
По сути, необходимо использовать средство выделения памяти как calloc (), если Вы хотите создать массив длины на основе переменной программы.
Просто не забывайте освобождать () его.