Nota: Esta es una traducción al español del quiz de evaluación de habilidades Python de LinkedIn. Para la versión original en inglés, consulte python-quiz.md.
- Una clase abstracta es el nombre de cualquier clase de la cual puedes instanciar un objeto.
- Las clases abstractas deben redefinirse cada vez que se instancia un objeto de ellas.
- Las clases abstractas deben heredar de clases concretas.
- Una clase abstracta existe únicamente para que otras clases "concretas" puedan heredar de ella.
- La función
any()siempre devuelve un elemento aleatorio de la lista. - La función
any()devuelve True si cualquier elemento de la lista se evalúa como True. De lo contrario, devuelve False. - La función
any()toma como argumentos la lista a verificar y el elemento a verificar. Si "cualquiera" de los elementos de la lista coincide con el elemento a verificar, la función devuelve True. - La función
any()devuelve un valor booleano que responde a la pregunta "¿Hay algún elemento en esta lista?"
ejemplo
if any([True, False, False, False]) == True:
print('Yes, there is True')
>>> 'Yes, there is True'- lista enlazada
- cola
- conjunto
- Los métodos estáticos se llaman estáticos porque siempre devuelven
None. - Los métodos estáticos pueden vincularse a una clase o a una instancia de una clase.
- Los métodos estáticos sirven principalmente como métodos de utilidad o ayuda, ya que no pueden acceder ni modificar el estado de una clase.
- Los métodos estáticos pueden acceder y modificar el estado de una clase o una instancia de una clase.
- Los atributos son versiones largas de una declaración
if/else, utilizadas al probar la igualdad entre objetos. - Los atributos son una forma de almacenar datos o describir un estado para una clase o una instancia de una clase.
- Los atributos son cadenas que describen las características de una clase.
- Los argumentos de función se llaman "atributos" en el contexto de métodos de clase y métodos de instancia.
Explicación: Los atributos se definen bajo la clase, y los argumentos van bajo las funciones. Los argumentos generalmente se refieren a parámetros, mientras que los atributos son los constructores de la clase o una instancia de la clase.
count, fruit, price = (2, 'apple', 3.5)
- Asignación de tupla.
- Desempaquetado de tupla.
- Coincidencia de tupla.
- Duplicación de tupla.
- método
.delete() -
pop(my_list) -
del(my_list) - método
.pop()
ejemplo
my_list = [1,2,3]
my_list.pop(0)
my_list
>>>[2,3]- Para capturar argumentos de línea de comandos dados en tiempo de ejecución de un archivo.
- Para conectar diferentes sistemas, como conectar un front-end web, un servicio API, una base de datos y una aplicación móvil.
- Para tomar una instantánea de todos los paquetes y librerías en tu entorno virtual.
- Para analizar la salud de tu ecosistema Python mientras estás en un entorno virtual.
- O(n), también llamado tiempo lineal.
- O(log n), también llamado tiempo logarítmico.
- O(n^2), también llamado tiempo cuadrático.
- O(1), también llamado tiempo constante.
Q10. ¿Cuál es la sintaxis correcta para definir una clase llamada Game, si hereda de una clase padre llamada LogicGame?
-
class Game(LogicGame): pass -
def Game(LogicGame): pass -
def Game.LogicGame(): pass -
class Game.LogicGame(): pass
Explicación: La clase padre de la cual se hereda se pasa como argumento a la clase hija. Por lo tanto, la primera opción es la respuesta correcta.
- A
def sum(a, b):
"""
sum(4, 3)
7
sum(-4, 5)
1
"""
return a + b- B
def sum(a, b):
"""
>>> sum(4, 3)
7
>>> sum(-4, 5)
1
"""
return a + b- C
def sum(a, b):
"""
# >>> sum(4, 3)
# 7
# >>> sum(-4, 5)
# 1
"""
return a + b- D
def sum(a, b):
###
>>> sum(4, 3)
7
>>> sum(-4, 5)
1
###
return a + bExplicación: Usa ''' para comenzar el doc y agrega la salida de la celda después de >>>
-
set -
list -
None -
dictionary -
Solo puedes construir una pila desde cero.
college_years = ['Freshman', 'Sophomore', 'Junior', 'Senior']
return list(enumerate(college_years, 2019))-
[('Freshman', 2019), ('Sophomore', 2020), ('Junior', 2021), ('Senior', 2022)] -
[(2019, 2020, 2021, 2022), ('Freshman', 'Sophomore', 'Junior', 'Senior')] -
[('Freshman', 'Sophomore', 'Junior', 'Senior'), (2019, 2020, 2021, 2022)] -
[(2019, 'Freshman'), (2020, 'Sophomore'), (2021, 'Junior'), (2022, 'Senior')]
-
selfsignifica que no se requiere que se pasen otros argumentos al método. - No hay un propósito real para el método
self; es solo jerga histórica de la informática que Python mantiene para ser consistente con otros lenguajes de programación. -
selfse refiere a la instancia cuyo método fue llamado. -
selfse refiere a la clase de la cual se heredó para crear el objeto usandoself.
Ejemplo simple
class my_secrets:
def __init__(self, password):
self.password = password
pass
instance = my_secrets('1234')
instance.password
>>>'1234'- Puedes asignar un nombre a cada uno de los miembros del
namedtupley hacer referencia a él de esa manera, de la misma forma que accederías a las claves en undictionary. - Cada miembro de un objeto namedtuple puede ser indexado directamente, igual que en un
tupleregular. - Los
namedtuplesson tan eficientes en memoria como lostuplesregulares. - No se necesita importación para usar
namedtuplesporque están disponibles en la biblioteca estándar.
Debemos importarlo usando: from collections import namedtuple
- Los métodos de instancia pueden modificar el estado de una instancia o el estado de su clase padre.
- Los métodos de instancia contienen datos relacionados con la instancia.
- Un método de instancia es cualquier método de clase que no toma argumentos.
- Un método de instancia es una función regular que pertenece a una clase, pero debe devolver
None.
- Protege los datos de interferencias externas.
- Una clase padre está encapsulada y ningún dato de la clase padre pasa a la clase hija.
- Mantiene los datos y los métodos que pueden manipular esos datos en el mismo lugar.
- Solo permite que los métodos modifiquen los datos.
- Le dice a la computadora qué pieza de código ejecutar si las instrucciones que has codificado son incorrectas.
- Ejecuta una pieza de código si todas las importaciones tuvieron éxito, y una pieza diferente de código si las importaciones no tuvieron éxito.
- Ejecuta una pieza de código si una condición es verdadera, pero una pieza diferente de código si la condición es falsa.
- Le dice a la computadora qué pieza de código ejecutar si hay suficiente memoria para manejarlo, y qué pieza de código ejecutar si no hay suficiente memoria para manejarlo.
- dictionary
- set
- None. Solo puedes construir una cola desde cero.
- list
-
my_game = class.Game() -
my_game = class(Game) -
my_game = Game() -
my_game = Game.create()
- Crea un camino de múltiples valores en un iterable hacia un solo valor.
- Aplica una función a cada elemento de un iterable y devuelve el valor de esa función.
- Convierte un tipo de valor complejo en tipos de valores más simples.
- Crea un mapeo entre dos elementos diferentes de iterables diferentes.
Explicación: - La sintaxis de la función map() es list(map(function,iterable)). Una calculadora simple de área usando map sería así
import math
radius = [1,2,3]
area = list(map(lambda x: round(math.pi*(x**2), 2), radius))
area
>>> [3.14, 12.57, 28.27]- La función devolverá un RuntimeError si no devuelves un valor.
- Si la palabra clave return está ausente, la función devolverá
None. - Si la palabra clave return está ausente, la función devolverá
True. - La función entrará en un bucle infinito porque no sabrá cuándo dejar de ejecutar su código.
referencia. Cuando la declaración return es None o no tiene valor o no hay declaración return, la función devuelve None.
- Se usa para saltar la declaración
yieldde un generador y devolver un valor None. - Es una operación nula usada principalmente como marcador de posición en funciones, clases, etc.
- Se usa para pasar el control de un bloque de declaraciones a otro.
- Se usa para saltar el resto de un bucle
whileofory volver al inicio del bucle.
La declaración pass se usa como marcador de posición para código futuro. Cuando se ejecuta la declaración pass, no pasa nada, pero evitas obtener un error cuando no se permite código vacío. referencia
- argumentos
- paradigmas
- atributos
- decoradores
-
slot -
dictionary -
queue -
sorted list
- cuando encuentra un bucle infinito
- cuando encuentra una declaración if/else que contiene una palabra clave break
- cuando ha evaluado cada elemento del iterable en el que está trabajando o se encuentra una palabra clave break
- cuando el tiempo de ejecución del bucle excede O(n^2)
Q27. Asumiendo que el nodo está en una lista enlazada simple, ¿cuál es la complejidad temporal de buscar un nodo específico en una lista enlazada simple?
- El tiempo de ejecución es O(n) porque en el peor caso, el nodo que buscas es el último nodo, y cada nodo en la lista enlazada debe ser visitado.
- El tiempo de ejecución es O(nk), con n representando el número de nodos y k representando el tiempo requerido para acceder a cada nodo en memoria.
- El tiempo de ejecución no puede determinarse a menos que sepas cuántos nodos están en la lista enlazada simple.
- El tiempo de ejecución es O(1) porque puedes indexar directamente un nodo en una lista enlazada simple.
Q28. Dadas las siguientes tres listas, ¿cómo crearías una nueva lista que coincida con la salida deseada impresa abajo?
fruits = ['Apples', 'Oranges', 'Bananas']
quantities = [5, 3, 4]
prices = [1.50, 2.25, 0.89]
#Salida deseada
[('Apples', 5, 1.50),
('Oranges', 3, 2.25),
('Bananas', 4, 0.89)]- A
output = []
fruit_tuple_0 = (first[0], quantities[0], price[0])
output.append(fruit_tuple)
fruit_tuple_1 = (first[1], quantities[1], price[1])
output.append(fruit_tuple)
fruit_tuple_2 = (first[2], quantities[2], price[2])
output.append(fruit_tuple)
return output- B
i = 0
output = []
for fruit in fruits:
temp_qty = quantities[i]
temp_price = prices[i]
output.append((fruit, temp_qty, temp_price))
i += 1
return output- C
groceries = zip(fruits, quantities, prices)
return groceries
>>> [
('Apples', 5, 1.50),
('Oranges', 3, 2.25),
('Bananas', 4, 0.89)
]- D
i = 0
output = []
for fruit in fruits:
for qty in quantities:
for price in prices:
output.append((fruit, qty, price))
i += 1
return output- La función
all()devuelve un valor booleano que responde a la pregunta "¿Todos los elementos en esta lista son iguales?" - La función
all()devuelve True si todos los elementos en la lista pueden convertirse a cadenas. De lo contrario, devuelve False. - La función
all()devolverá todos los valores en la lista. - La función
all()devuelve True si todos los elementos en la lista se evalúan como True. De lo contrario, devuelve False.
Explicación: all() devuelve True si todos los elementos en la lista son True. Ver el ejemplo abajo:
test = [True, False, False, False]
if all(test) is True:
print('Yeah, all of them are true.')
else:
print('There is an imposter.')
>>> 'There is an imposter'(El formato de respuesta puede variar. Game y roll (o dice_roll) deben ser llamados sin parámetros.)
- A
>>> dice = Game()
>>> dice.roll()- B
>>> dice = Game(self)
>>> dice.roll(self)- C
>>> dice = Game()
>>> dice.roll(self)- D
>>> dice = Game(self)
>>> dice.roll()- Retroceso (Backtracking)
- Programación dinámica
- Disminuir y conquistar
- Dividir y conquistar
El ordenamiento por mezcla y el ordenamiento rápido emplean un paradigma algorítmico común basado en la recursión. Este paradigma, dividir y conquistar, descompone un problema en subproblemas similares al problema original, resuelve recursivamente los subproblemas, y finalmente combina las soluciones de los subproblemas para resolver el problema original. referencia
- O(1), también llamado tiempo constante.
- O(log n), también llamado tiempo logarítmico.
- O(n^2), también llamado tiempo cuadrático.
- O(n), también llamado tiempo lineal.
Esta función tiene una complejidad temporal constante, es decir, O(1), porque las listas son accesibles aleatoriamente, por lo que el último elemento puede alcanzarse en O(1), por eso el tiempo requerido para agregar el nuevo elemento al final de la lista es O(1).
- Un conjunto es una colección ordenada de elementos únicos. Una lista es una colección no ordenada de elementos no únicos.
- Los elementos pueden recuperarse de una lista pero no pueden recuperarse de un conjunto.
- Un conjunto es una colección ordenada de elementos no únicos. Una lista es una colección no ordenada de elementos únicos.
- Un conjunto es una colección no ordenada de elementos únicos. Una lista es una colección ordenada de elementos no únicos.
- La abstracción significa que se puede usar un estilo de código diferente porque muchos detalles ya son conocidos por el programa en segundo plano.
- La abstracción significa que la implementación está oculta al usuario, y solo se muestran los datos o información relevante.
- La abstracción significa que los datos y la funcionalidad de una clase se combinan en una sola entidad.
- La abstracción significa que una clase puede heredar de más de una clase padre.
La abstracción en Python se define como un proceso de manejar la complejidad ocultando información innecesaria al usuario. referencia
def print_alpha_nums(abc_list, num_list):
for char in abc_list:
for num in num_list:
print(char, num)
return
print_alpha_nums(['a', 'b', 'c'], [1, 2, 3])- A
a 1
a 2
a 3
b 1
b 2
b 3
c 1
c 2
c 3- B
['a', 'b', 'c'], [1, 2, 3]- C
aaa
bbb
ccc
111
222
333- D
a 1 2 3
b 1 2 3
c 1 2 3- A
def sum(a, b):
# a = 1
# b = 2
# sum(a, b) = 3
return a + b- B
def sum(a, b):
"""
a = 1
b = 2
sum(a, b) = 3
"""
return a + b- C
def sum(a, b):
"""
>>> a = 1
>>> b = 2
>>> sum(a, b)
3
"""
return a + b- D
def sum(a, b):
'''
a = 1
b = 2
sum(a, b) = 3
'''
return a + bExplicación: Usa """ para comenzar y terminar el docstring y usa >>> para representar la salida. Si escribes esto correctamente, también puedes ejecutar el doctest usando el módulo doctest incorporado
Q37. Supongamos que una clase Game hereda de dos clases padre: BoardGame y LogicGame. ¿Qué afirmación es verdadera respecto a los métodos de un objeto instanciado de la clase Game?
- Al instanciar un objeto, el objeto no hereda ninguno de los métodos de la clase padre.
- Al instanciar un objeto, el objeto heredará los métodos de la clase padre que tenga más métodos.
- Al instanciar un objeto, el programador debe especificar de qué clase padre heredar los métodos.
- Una instancia de la clase Game heredará todos los métodos que las clases BoardGame y LogicGame poseen.
- una clase de objeto genérica con campos de parámetros iterables
- una clase de objeto genérica con campos nombrados no iterables
- una subclase de tuple con campos de parámetros no iterables
- una subclase de tuple con campos nombrados iterables
Ejemplo
# la función namedtuple acepta los siguientes argumentos para generar una clase
from collections import namedtuple
>>> Point = namedtuple('Point',['x','y'])
>>> point = Point(100, 200)
>>> point
Point(x=100, y=200)
# Lo que te permite usar tanto desempaquetado como iteración para acceder
>>> x, y = point
>>> print(f'({x}, {y})')
(100, 200)
>>> for coordinate in point:
print(coordinate)
100
200-
&& -
= -
== -
||
fruit_info = {
'fruit': 'apple',
'count': 2,
'price': 3.5
}-
fruit_info['price'] = 1.5 -
my_list[3.5] = 1.5 -
1.5 = fruit_info['price] -
my_list['price'] == 1.5
5 != 6
-
yes -
False -
True -
None
Explicación: En Python, != es equivalente a no igual a.
- Permite que las clases se conozcan entre sí si se define más de una clase en un solo archivo de código.
- Se incluye para preservar la compatibilidad hacia atrás de Python 3 a Python 2, pero ya no necesita usarse en Python 3.
- Es un método que actúa como constructor y se llama automáticamente cada vez que se crea un nuevo objeto de una clase. Define el estado inicial de un nuevo objeto.
- Inicializa todas las importaciones que puedas haber incluido en la parte superior de tu archivo.
Ejemplo:
class test:
def __init__(self):
print('I came here without your permission lol')
pass
t1 = test()
>>> 'I came here without your permission lol'-
Cuántos microprocesadores se necesitarían para ejecutar tu código en menos de un segundo -
Cuántas líneas de código hay en tu archivo de código -
La cantidad de espacio ocupado en memoria en función del tamaño de la entrada -
Cuántas copias del archivo de código podrían caber en 1 GB de memoria
-
fruit_info = {'fruit': 'apple', 'count': 2, 'price': 3.5} -
fruit_info =('fruit': 'apple', 'count': 2,'price': 3.5 ).dict() -
fruit_info = ['fruit': 'apple', 'count': 2,'price': 3.5 ].dict() -
fruit_info = to_dict('fruit': 'apple', 'count': 2, 'price': 3.5)
Q45. ¿Cuál es la forma apropiada de escribir una comprensión de lista que represente todas las claves de este diccionario?
fruits = {'Apples': 5, 'Oranges': 3, 'Bananas': 4}
-
fruit_names = [x in fruits.keys() for x] -
fruit_names = for x in fruits.keys() * -
fruit_names = [x for x in fruits.keys()] -
fruit_names = x for x in fruits.keys()
Q46. ¿Cuál es el propósito de la palabra clave self al definir o llamar métodos en una instancia de un objeto?
-
selfse refiere a la clase de la cual se heredó para crear el objeto usandoself. - No hay un propósito real para el método
self. Es solo jerga informática heredada que Python mantiene para ser consistente con otros lenguajes de programación. -
selfsignifica que no se requiere que se pasen otros argumentos al método. -
selfse refiere a la instancia cuyo método fue llamado.
Explicación: - Intenta ejecutar el ejemplo de Q42 sin pasar el argumento self en el __init__, entenderás la razón. Obtendrás el error como este __init__() takes 0 positional arguments but 1 was given, esto significa que algo entra aunque no se haya especificado, que es la instancia misma.
- Un método de clase es una función regular que pertenece a una clase, pero debe devolver None.
- Un método de clase puede modificar el estado de la clase, pero no puede modificar directamente el estado de una instancia que hereda de esa clase.
- Un método de clase es similar a una función regular, pero un método de clase no toma argumentos.
- Un método de clase contiene todos los datos de una clase particular.
Referencia
Los métodos de clase son métodos que se llaman en la clase misma, no en una instancia de objeto específica. Por lo tanto, pertenece a un nivel de clase, y todas las instancias de clase comparten un método de clase.
- No has usado muchos conceptos avanzados de programación informática en tu código.
- El nivel de dificultad al que está escrito tu código no es tan alto.
- Tomará menos de medio segundo para que tu programa se ejecute.
- El tiempo requerido para que la función termine aumenta linealmente a medida que aumenta el tamaño de la entrada.
-
def getMaxNum(list_of_nums): # cuerpo de la función aquí -
func get_max_num(list_of_nums): # cuerpo de la función aquí -
func getMaxNum(list_of_nums): # cuerpo de la función aquí -
def get_max_num(list_of_nums): # cuerpo de la función aquí
El uso de guiones bajos como separadores de palabras se remonta a finales de los años 1960. Está particularmente asociado con C, se encuentra en The C Programming Language (1978), y contrasta con Pascal case (un tipo de camel case). Sin embargo, la convención tradicionalmente no tenía un nombre específico: la guía de estilo del lenguaje de programación Python simplemente se refiere a él como "lower_case_with_underscores". En Usenet, el término snake_case se vio por primera vez en la comunidad Ruby en 2004, usado por Gavin Kistner, escribiendo: Por cierto... ¿cómo llamas a este estilo de nomenclatura? ¿snake_case? Así es como lo llamaré hasta que alguien me corrija.
Q50. Según las pautas de estilo de codificación PEP 8, ¿cómo deben nombrarse los valores constantes en Python?
- en camel case sin usar guiones bajos para separar palabras -- ej.
maxValue = 255 - en minúsculas con guiones bajos para separar palabras -- ej.
max_value = 255 - en mayúsculas con guiones bajos separando las palabras -- ej.
MAX_VALUE = 255 - en case mixto sin usar guiones bajos para separar palabras -- ej.
MaxValue = 255
Usa una letra mayúscula única, una palabra o palabras. Separa las palabras con guiones bajos para mejorar la legibilidad. Referencia
- Una deque agrega elementos de un lado y elimina elementos del otro lado.
- Una deque agrega elementos de un lado o ambos lados pero elimina únicamente elementos de la parte superior.
- Una deque agrega elementos a uno o ambos extremos y elimina elementos de uno o ambos extremos.
- Una deque agrega elementos únicamente en la parte superior pero los elimina de un lado o ambos lados.
Deque o Double Ended Queue es una versión generalizada de la estructura de datos Queue que permite inserción y eliminación en ambos extremos. referencia
-
my_set = {0, 'apple', 3.5} -
my_set = to_set(0, 'apple', 3.5) -
my_set = (0, 'apple', 3.5).to_set() -
my_set = (0, 'apple', 3.5).set()
- :
class __init__(self):
pass- :
def __init__():
pass- :
class __init__():
pass- :
def __init__(self):
passQ54. ¿Cuál de las siguientes afirmaciones es VERDADERA sobre cómo se organizarían los datos numéricos en un árbol de búsqueda binaria?
- Para cualquier nodo dado en un árbol de búsqueda binaria, el valor del nodo es mayor que todos los valores en el subárbol izquierdo del nodo y menor que los de su subárbol derecho.
- El árbol de búsqueda binaria no puede usarse para organizar y buscar datos numéricos, dadas las complicaciones que surgen con árboles muy profundos.
- El nodo superior del árbol de búsqueda binaria sería un número arbitrario. Todos los nodos a la izquierda del nodo superior deben ser menores que el número del nodo superior, pero no necesitan estar ordenados de una manera particular.
- El valor numérico más pequeño iría en el nodo más alto. El siguiente número más alto iría en su nodo hijo izquierdo, el siguiente número más alto después de eso iría en su nodo hijo derecho. Este patrón continuaría hasta que todos los valores numéricos estén en su nodo.
En ciencias de la computación, un árbol de búsqueda binaria (BST), también llamado árbol binario ordenado o clasificado, es una estructura de datos de árbol binario enraizado con la clave de cada nodo interno siendo mayor que todas las claves en el subárbol izquierdo del nodo respectivo y menor que las de su subárbol derecho. referencia
- Un decorador es similar a una clase y debe usarse si estás haciendo programación funcional en lugar de programación orientada a objetos.
- Un decorador es un indicador visual para alguien que lee tu código de que una parte de tu código es crítica y no debe modificarse.
- Usas el decorador para modificar la funcionalidad de una función sin tener que modificar el código de la función.
- Una declaración de importación es precedida por un decorador, Python sabe importar la versión más reciente del paquete o librería importada.
Los decoradores nos permiten envolver otra función para extender el comportamiento de la función envuelta, sin modificarla permanentemente. referencia
- Solo en ciertas situaciones, porque los bucles solo se usan para ciertos tipos de programación.
- Cuando necesitas verificar cada elemento en un iterable de longitud conocida.
- Cuando quieres minimizar el uso de cadenas en tu código.
- Cuando quieres ejecutar código en un archivo para una función en otro archivo.
Q57. ¿Cuál es la forma más autodescriptiva de definir una función que calcule el impuesto de ventas en una compra?
- A:
def tax(my_float):
''' Calcula el impuesto de ventas de una compra. Toma un float que representa el subtotal como argumento y devuelve un float que representa el impuesto de ventas.'''
pass- B:
def tx(amt):
''' Obtiene el impuesto de una cantidad.'''- C:
def sales_tax(amount):
''' Calcula el impuesto de ventas de una compra. Toma un float que representa el subtotal como argumento y devuelve un float que representa el impuesto de ventas.'''- D:
def calculate_sales_tax(subtotal):
passQ58. ¿Qué pasaría si no modificaras el estado del elemento en el que un algoritmo opera de forma recursiva?
- No tienes que modificar el estado del elemento en el que el algoritmo hace recursión.
- Terminarías obteniendo un KeyError cuando la parte recursiva del código se quede sin elementos sobre los cuales hacer recursión.
- Obtendrías un RuntimeError: maximum recursion depth exceeded.
- La función que usa recursión devolvería None.
- El tiempo de ejecución para buscar en un árbol de búsqueda binaria es O(1) porque cada nodo actúa como una clave, similar a un diccionario.
- El tiempo de ejecución para buscar en un árbol de búsqueda binaria es O(n!) porque cada nodo debe compararse con todos los otros nodos.
- El tiempo de ejecución para buscar en un árbol de búsqueda binaria es generalmente O(h), donde h es la altura del árbol.
- El tiempo de ejecución para buscar en un árbol de búsqueda binaria es O(n) porque cada nodo en el árbol debe visitarse.
- Usas un
mixinpara forzar a una función a aceptar un argumento en tiempo de ejecución aunque el argumento no estuviera incluido en la definición de la función. - Usas un
mixinpara permitir que un decorador acepte argumentos de palabras clave. - Usas un
mixinpara asegurar que los atributos y métodos de una clase no interfieran con las variables y funciones globales. - Si tienes muchas clases que todas necesitan tener la misma funcionalidad, usarías un
mixinpara definir esa funcionalidad.
Hay dos situaciones principales donde se usan los mixins: Quieres proporcionar muchas funcionalidades opcionales para una clase. Quieres usar una funcionalidad particular en muchas clases diferentes. referencia explicación
Q61. ¿Cuál es la complejidad temporal de agregar un elemento a una pila y eliminar un elemento de una pila?
- Agregar elementos a una pila en tiempo O(1) y eliminar elementos de una pila en tiempo O(n).
- Agregar elementos a una pila en tiempo O(1) y eliminar elementos de una pila en tiempo O(1).
- Agregar elementos a una pila en tiempo O(n) y eliminar elementos de una pila en tiempo O(1).
- Agregar elementos a una pila en tiempo O(n) y eliminar elementos de una pila en tiempo O(n).
- una pila agrega elementos de un lado y elimina elementos del otro lado.
- una pila agrega elementos en la parte superior y elimina elementos de la parte superior.
- una pila agrega elementos en la parte superior y elimina elementos de cualquier lugar en la pila.
- una pila agrega elementos a cualquier extremo y elimina elementos de cualquier extremo.
Explicación: La pila usa el enfoque último en entrar, primero en salir (last in first out).
- Un caso base es la condición que permite al algoritmo dejar de hacer recursión. Usualmente es un problema lo suficientemente pequeño para resolverse directamente.
- El caso base es un resumen del problema general que necesita resolverse.
- El caso base se pasa como argumento a una función cuyo cuerpo hace uso de la recursión.
- El caso base es similar a una clase base, en que puede ser heredado por otro objeto.
Q64. ¿Por qué se considera una buena práctica abrir un archivo desde un script Python usando la palabra clave with?
- La palabra clave
withte permite elegir en qué aplicación abrir el archivo. - La palabra clave
withactúa como un buclefor, y te permite acceder a cada línea en el archivo una por una. - No hay beneficio en usar la palabra clave
withpara abrir un archivo en Python. - Cuando abres un archivo usando la palabra clave
withen Python, Python se asegurará de que el archivo se cierre, incluso si se lanza una excepción o error.
Es una buena práctica usar la palabra clave 'with' cuando se trata de objetos archivo. La ventaja es que el archivo se cierra correctamente después de que su suite termina, incluso si se lanza una excepción en algún punto. Usar with también es mucho más corto que escribir bloques try-finally equivalentes:
ejemplo
>>> f = open('workfile', 'w', encoding="utf-8")
>>> with open('workfile', encoding="utf-8") as f:
read_data = f.read()
# Podemos verificar que el archivo se ha cerrado automáticamente.
>>> f.closed
True- Los entornos virtuales crean una "burbuja" alrededor de tu proyecto para que cualquier librería o paquete que instales dentro no afecte toda tu máquina.
- Los equipos con empleados remotos usan entornos virtuales para poder compartir código, hacer revisiones de código y colaborar remotamente.
- Los entornos virtuales eran comunes en Python 2 porque aumentaban las características faltantes en el lenguaje. Los entornos virtuales no son necesarios en Python 3 debido a los avances en el lenguaje.
- Los entornos virtuales están vinculados a tu cuenta de GitHub o Bitbucket, permitiéndote acceder virtualmente a cualquiera de tus repositorios desde cualquier máquina.
Q66. ¿Cuál es la forma correcta de ejecutar todos los doctests en un archivo dado desde la línea de comandos?
-
python3 -m doctest <_filename_> -
python3 <_filename_> -
python3 <_filename_> rundoctests -
python3 doctest
También hay un atajo de línea de comandos para ejecutar testmod(). Puedes instruir al intérprete de Python para ejecutar el módulo doctest directamente desde la biblioteca estándar y pasar el/los nombre(s) de módulo en la línea de comandos:
python -m doctest -v example.py
Esto importará example.py como un módulo independiente y ejecutará testmod() en él. Ten en cuenta que esto puede no funcionar correctamente si el archivo es parte de un paquete e importa otros submódulos de ese paquete.
referencia
video tutorial
- cualquier función que hace uso de constantes científicas o matemáticas, a menudo representadas por letras griegas en la escritura académica
- una función que se ejecuta cuando se usan decoradores
- cualquier función cuya definición está contenida dentro de cinco líneas de código o menos
- una función pequeña y anónima que puede tomar cualquier número de argumentos pero tiene solo una expresión para evaluar
Explicación:
La notación lambda es una función anónima que puede tomar cualquier número de argumentos con solo una expresión (es decir, no puede sobrecargarse). Ha sido introducida en otros lenguajes de programación, como C++ y Java. La notación lambda permite a los programadores "evitar" la declaración de función.
- Puedes acceder a un elemento específico en una lista indexando a su posición, pero no puedes acceder a un elemento específico en una tupla a menos que iteres a través de la tupla
- Las listas son mutables, lo que significa que puedes cambiar los datos que están dentro de ellas en cualquier momento. Las tuplas son inmutables, lo que significa que no puedes cambiar los datos que están dentro de ellas una vez que has creado la tupla.
- Las listas son inmutables, lo que significa que no puedes cambiar los datos que están dentro de ellas una vez que has creado la lista. Las tuplas son mutables, lo que significa que puedes cambiar los datos que están dentro de ellas en cualquier momento.
- Las listas pueden contener varios tipos de datos a la vez, pero las tuplas solo pueden contener el mismo tipo de datos si hay múltiples elementos presentes.
- None
- Un objeto iterable
- Una estructura de datos de lista enlazada de una lista no vacía
- Todas las claves del diccionario dado
- Los atributos de instancia pueden cambiarse, pero los atributos de clase no pueden cambiarse
- Los atributos de clase son compartidos por todas las instancias de la clase. Los atributos de instancia pueden ser únicos solo para esa instancia
- No hay diferencia entre atributos de clase y atributos de instancia
- Los atributos de clase pertenecen solo a la clase, no a la instancia de esa clase. Los atributos de instancia se comparten entre todas las instancias de una clase
- :
def get_next_card():
# cuerpo del método aquí- :
def get_next_card(self):
# cuerpo del método aquí- :
def self.get_next_card():
# cuerpo del método aquí- :
def self.get_next_card(self):
# cuerpo del método aquí-
get_max_num([57, 99, 31, 18]) -
call.(get_max_num) -
def get_max_num([57, 99, 31, 18]) -
call.get_max_num([57, 99, 31, 18])
-
-- Esto es un comentario -
# Esto es un comentario -
/* Esto es un comentario */ -
// Esto es un comentario
Q74. ¿Cuál es la sintaxis correcta para reemplazar la cadena apple en la lista con la cadena orange?
my_list = ['kiwi', 'apple', 'banana']-
orange = my_list[1] -
my_list[1] = 'orange' -
my_list['orange'] = 1 -
my_list[1] == orange
Q75. ¿Qué pasará si usas un bucle while y olvidas incluir lógica que eventualmente detenga el bucle while?
- No pasará nada; tu computadora sabe cuándo dejar de ejecutar el código en el bucle while.
- Obtendrás un KeyError.
- Tu código se quedará atascado en un bucle infinito.
- Obtendrás un WhileLoopError.
- Una cola agrega elementos a cualquier extremo y elimina elementos de cualquier extremo.
- Una cola agrega elementos en la parte superior y elimina elementos de la parte superior.
- Una cola agrega elementos en la parte superior y elimina elementos de cualquier lugar en una lista.
- Una cola agrega elementos en la parte superior y elimina elementos de cualquier lugar en la cola.
- A:
num_people = 5
if num_people > 10:
print("There is a lot of people in the pool.")
elif num_people > 4:
print("There are some people in the pool.")
else:
print("There is no one in the pool.")- B:
num_people = 5
if num_people > 10:
print("There is a lot of people in the pool.")
if num_people > 4:
print("There are some people in the pool.")
else:
print("There is no one in the pool.")- C:
num_people = 5
if num_people > 10;
print("There is a lot of people in the pool.")
elif num_people > 4;
print("There are some people in the pool.")
else;
print("There is no one in the pool.")- D:
if num_people > 10;
print("There is a lot of people in the pool.")
if num_people > 4;
print("Hay algunas personas en la piscina.")
else;
print("No hay nadie en la piscina.")-
defaultdictcreará automáticamente un diccionario para ti que tiene claves que son los enteros 0-10. -
defaultdictfuerza a un diccionario a aceptar solo claves de los tipos especificados cuando se crea eldefaultdict(como cadenas o enteros). - Si intentas leer de un
defaultdictcon una clave inexistente, se creará un nuevo par clave-valor por defecto para ti en lugar de lanzar unKeyError. -
defaultdictalmacena una copia de un diccionario en memoria al cual puedes volver por defecto si el original se modifica involuntariamente.
defaultdict es un diccionario tipo contenedor presente en el módulo collections. La funcionalidad de los diccionarios y de defaultdict es casi la misma, excepto que defaultdict nunca lanza un KeyError. Proporciona un valor por defecto para la clave que no existe.
ejemplo
# Función para devolver un valor por defecto
# para claves que no están presentes
def def_value():
return "Not Present"
# Definiendo el dict
d = defaultdict(def_value)Q79. ¿Cuál es la sintaxis correcta para agregar una clave llamada variety al diccionario fruit_info que tiene un valor de Red Delicious?
-
fruit_info['variety'] == 'Red Delicious' -
fruit_info['variety'] = 'Red Delicious' -
red_delicious = fruit_info['variety'] -
red_delicious == fruit_info['variety']
- Cuando quieres minimizar el uso de cadenas en tu código.
- Cuando quieres ejecutar código en un archivo mientras código en otro archivo también se está ejecutando.
- Cuando quieres que un código continúe ejecutándose mientras una cierta condición sea verdadera.
- Cuando necesitas ejecutar dos o más piezas de código al mismo tiempo en el mismo archivo.
Ejemplo Simple
i = 1
while i<6:
print(f"Countdown: {i}")
i = i + 1Q81. ¿Cuál es la sintaxis correcta para definir un método __init__() que establece atributos específicos de instancia al crear una nueva instancia de clase?
- :
def __init__(self, attr1, attr2):
attr1 = attr1
attr2 = attr2- :
def __init__(attr1, attr2):
attr1 = attr1
attr2 = attr2- :
def __init__(self, attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2- :
def __init__(attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2Explicación: Al instanciar un nuevo objeto de una clase dada, el método __init__() tomará tanto attr1 como attr2, y establecerá sus valores a su atributo de objeto correspondiente, por eso necesitas usar self.attr1 = attr1 en lugar de attr1 = attr1.
def count_recursive(n=1):
if n > 3:
return
print(n)
count_recursive(n + 1)- :
1
1
2
2
3
3- :
3
2
1- :
3
3
2
2
1
1- :
1
2
3Q83. En Python, al usar conjuntos, usas _ para calcular la intersección entre dos conjuntos y _ para calcular la unión.
-
Intersect;union -
|;& -
&;| -
&&;||
import numpy as np
np.ones([1,2,3,4,5])- Devuelve una matriz 5x5; cada fila tendrá los valores 1,2,3,4,5.
- Devuelve un array con los valores 1,2,3,4,5.
- Devuelve cinco matrices cuadradas diferentes llenas de unos. La primera es 1x1, la segunda 2x2, y así sucesivamente hasta 5x5.
- Devuelve un array de 5 dimensiones de tamaño 1x2x3x4x5 lleno de 1.
Q85. Te encuentras con una FileNotFoundException al usar solo el nombre del archivo en la función open. ¿Cuál podría ser la solución más simple?
- Asegúrate de que el archivo esté en el
PATHdel sistema. - Crea un enlace simbólico para permitir mejor acceso al archivo.
- Copia el archivo al mismo directorio donde se ejecuta el script.
- Agrega la ruta del archivo a la variable de entorno
PYTHONPATH.
{x for x in range(100) if x%3 == 0}- Un conjunto de todos los múltiplos de 3 menores que 100.
- Un conjunto de todos los números de 0 a 100 multiplicados por 3.
- Una lista de todos los múltiplos de 3 menores que 100.
- Un conjunto de todos los múltiplos de 3 menores que 100 excluyendo 0.
referencia Es una Comprensión de Conjunto porque está entre '{}', llaves, así que devolverá un 'Conjunto' !
- Realizar división entera.
- Realizar operaciones con exponentes.
- Encontrar el residuo de una operación de división.
- Realizar división de punto flotante.
-
datetime -
dateday -
daytime -
timedate
-
def Game(): pass -
def Game: pass -
class Game: pass -
class Game(): pass
-
my_game = Game(self) self.my_game.roll_dice() -
my_game = Game() self.my_game.roll_dice() -
my_game = Game() my_game.roll_dice() -
my_game = Game(self) my_game.roll_dice(self)
a = np.array([1,2,3,4])
print(a[[False, True, False, False]])-
{0,2} -
[2] -
{2} -
[0,2,0,0]
Q92. Supongamos que tienes una variable de cadena definida como y="stuff;thing;junk;". ¿Cuál sería la salida de este código?
z = y.split(';')
len(z)- 17
- 4
- 0
- 3
Explicación:
y="stuff;thing;junk"
len(z) ==> 3
y="stuff;thing;junk;"
len(z) ==> 4num_list = [1,2,3,4,5]
num_list.remove(2)
print(num_list)-
[1,2,4,5] -
[1,3,4,5] -
[3,4,5] -
[1,2,3]
Explicación: .remove() está basado en el valor del elemento, no en el índice; aquí, elimina el elemento que coincide con "2". Si quisieras eliminar un elemento basado en su índice, usarías .pop().
num_list = [1,2,3,4,5]
num_list.pop(2)
>>> [1,2,4,5]
num_list.remove(2)
>>> [1,3,4,5][10,9,8,7,6,5,4,3,2,1]
-
reversed(list(range(1,11))) -
list(reversed(range(1,10))) -
list(range(10,1,-1)) -
list(reversed(range(1,11)))
import math
print(math.pow(2,10)) # imprime 2 elevado a la potencia 10- :
print(2^10)- :
print(2**10)- :
y = [x*2 for x in range(1,10)]
print(y)- :
y = 1
for i in range(1,10):
y = y * 2
print(y)- solo conjuntos; listas o diccionarios; tuplas
- listas; solo conjuntos; tuplas
- tuplas; conjuntos o listas; diccionarios
- listas; diccionarios o conjuntos; tuplas
table = np.array([
[1,3],
[2,4]])
print(table.max(axis=1))-
[2, 4] -
[3, 4] -
[4] -
[1,2]
number = 3
print(f"The number is {number}")-
The number is 3 -
the number is 3 -
THE NUMBER IS 3 - Lanza una
TypeErrorporque el entero debe convertirse a cadena.
-
my_tuple tup(2, 'apple', 3.5) %D -
my_tuple [2, 'apple', 3.5].tuple() %D -
my_tuple = (2, 'apple', 3.5) -
my_tuple = [2, 'apple', 3.5]
-
write('w') -
scan('s') -
append('a') -
read('r')
- Vectorización.
- Atribuciones.
- Aceleración.
- Programación funcional.
-
set -
list -
tuple -
dictionary
-
sys.exc_info() -
os.system() -
os.getcwd() -
sys.executable
Q104. Supongamos que tienes el siguiente fragmento de código y quieres extraer una lista con solo las letras. ¿Qué fragmento de código NO logrará ese objetivo?
my_dictionary = {
'A': 1,
'B': 2,
'C': 3,
'D': 4,
'E': 5
}letters = []
for letter in my_dictionary.values():
letters.append(letter)-
letters = my_dictionary.keys() -
letters = [letter for (letter, number) in my_dictionary.items()] -
letters4 = list(my_dictionary)
Explicación: El primero (la opción correcta) devuelve la lista de los valores (los números). El resto de las opciones devuelven una lista de las claves.
Q105. Cuando un array es grande, NumPy no imprimirá todo el array cuando se le da la función incorporada print. ¿Qué función puedes usar dentro de NumPy para forzarlo a imprimir todo el array?
-
set_printparams -
set_printoptions -
set_fullprint -
setp_printwhole
- Usas bloques
try/exceptcuando quieres ejecutar algún código, pero necesitas una forma de ejecutar código diferente si se lanza una excepción. - Usas bloques
try/exceptdentro de pruebas unitarias para que las pruebas unitarias siempre pasen. - Usas bloques
try/exceptpara poder demostrar a tus revisores de código que intentaste un nuevo enfoque, pero si el nuevo enfoque no es lo que estaban buscando, pueden dejar comentarios bajo la palabra claveexcept. - Usas bloques
try/exceptpara que ninguna de tus funciones o métodos devuelvaNone.
-
debido al nivel de indentación después del bucle for -
debido a la palabra clave end al final del bucle for -
porque el bloque está rodeado por llaves ({}) -
debido al espacio en blanco al final del cuerpo del bucle for
Q108. ¿Qué mecanismo Python es más adecuado para decirle a un usuario que está usando una función obsoleta?
-
sys.stdout - Traceback
- Warnings (Advertencias)
- Exceptions
x = {1,2,3,4,5}
x.add(5)
x.add(6)-
{1, 2, 3, 4, 5, 5, 6} -
{5, 6, 1, 2, 3, 4, 5, 6} -
{6, 1, 2, 3, 4, 5} -
{1, 2, 3, 4, 5, 6}
Explicación: El método .add() agrega el elemento al conjunto solo si no existe.
fruit_info = {
'fruit': 'apple',
'count': 2,
'price': 3.5
}-
my_keys = fruit_info.to_keys() -
my_keys = fruit_info.all_keys() -
my_keys = fruit_info.keys -
my_keys = fruit_info.keys()
def be_friendly(greet = "How are you!", name):
pass-
namees una palabra reservada. - Los guiones bajos no están permitidos en nombres de funciones.
- Un argumento sin valor por defecto sigue a un argumento con valor por defecto.
- No hay nada malo con esta definición de función.
- :
a = np.zeros([3,4])
b = a.copy()
np.array_equal(a,b)- :
a = np.empty([3,4])
b = np.empty([3,4])
np.array_equal(a,b)- :
a = np.zeros([3,4])
b = np.zeros([4,3])
np.array_equal(a,b)- :
a = np.array([1, np.nan])
np.array_equal(a,a)-
// Esto es un comentario -
# Esto es un comentario -
-- Esto es un comentario -
/* Esto es un comentario */
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = a*b
d = np.dot(a,b)- A
c = [ a[1] * b[1], a[2] * b[2], a[3] * b[3] ]
d = sum(c)- B
c = a[0] * b[0], a[1] * b[1], a[2] * b[2]
d = [ a[0] * b[0], a[1] * b[1], a[2] * b[2] ]- C
c = [ a[0] * b[0], a[1] * b[1], a[2] * b[2] ]
d = sum(a) + sum(b)- D
c = [ a[0] * b[0], a[1] * b[1], a[2] * b[2] ]
d = sum(c)Q115. ¿Qué dos funciones dentro de la biblioteca NumPy podrías usar para resolver un sistema de ecuaciones lineales?
-
linalg.eig() and .matmul() -
linalg.inv() and .dot() -
linalg.det() and .dot() -
linalg.inv() and .eye()
Explicación: Entender esta respuesta requiere conocimiento de álgebra lineal. Algunos sistemas de ecuaciones pueden resolverse mediante el método de diagonalización, que implica encontrar los vectores propios y valores propios de la matriz del sistema y multiplicar matrices relacionadas.
-
my_list = (2, 'apple', 3.5) -
my_list = [2, 'apple', 3.5] -
my_list = [2, 'apple', 3.5].to_list() -
my_list = to_list(2, 'apple', 3.5)
num_list = [21, 13, 19, 3, 11, 5, 18]
num_list.sort()
num_list[len(num_list) // 2]- moda
- promedio
- media
- mediana
Explicación: // es el operador de división entera, que es una operación de división normal que devuelve el entero más grande posible, menor o igual al resultado de la división normal. Aquí se usa para encontrar la mediana, que es el valor que separa la mitad superior de la mitad inferior de una muestra de datos, encontrando el índice del elemento de la lista en el medio de la lista. (Esto es suficiente para una lista con un número impar de elementos; si la lista tuviera un número par de elementos, promediarías los valores de los dos elementos del medio para encontrar el valor de la mediana.)
- Arrays y DataFrames
- Series y Matrices
- Matrices y DataFrames
- Series y DataFrames
Q119. Supongamos que tienes una variable llamada vector de tipo np.array con 10,000 elementos. ¿Cómo puedes convertir vector en una variable llamada matrix con dimensiones 100x100?
-
matrix = (vector.shape = (100,100)) -
matrix = vector.to_matrix(100,100) -
matrix = matrix(vector,100,100) -
matrix = vector.reshape(100, 100)
- Dictionary
- List
- Set
- String
def myFunction(country = "France"):
print(f"Hello, I am from {country}")
myFunction("Spain")
myFunction("")
myFunction()- :
Hello, I am from Spain
Hello, I am from
Hello, I am from- :
Hello, I am from France
Hello, I am from France
Hello, I am from France- :
Hello, I am from Spain
Hello, I am from
Hello, I am from France- :
Hello, I am from Spain
Hello, I am from France
Hello, I am from France- Clase Anónima
- Clase Padre
- Clase Anidada
- Clase Abstracta
Q123. Usando Pandas, cargamos un conjunto de datos de Kaggle, estructurado como en la imagen abajo. ¿Qué comando devolverá el número total de sobrevivientes?
-
sum(titanic['Survived']) -
[x for x in titanic['Survived'] if x == 1] -
len(titanic["Survived"]) -
sum(titanic['Survived']==0)
Explicación: El titanic['Survived'] devuelve un objeto pandas.Series, que contiene la columna Survived del DataFrame.
Sumar los valores de esta columna (es decir, sum(titanic['Survived'])) devuelve el número total de sobrevivientes ya que un sobreviviente está representado por un 1 y una pérdida por 0.
characters = ["Iron Man", "Spider Man", "Captain America"]
actors = ["Downey", "Holland", "Evans"]
# salida ejemplo : [("IronMan", "Downey"), ("Spider Man", "Holland"), ("Captain America", "Evans")]-
[(x,y)] for x in characters for y in actors] -
zip(characters, actors) -
d = {} for x in range(1, len(characters)): d[x] = actors[x]
-
{x:y for x in characters for y in actors}
{x : x*x for x in range(1,100)}- Un diccionario con
xcomo clave, yxal cuadrado como su valor; de 1 a 100. - Un diccionario con
xcomo clave, yxal cuadrado como su valor; de 1 a 99. - Un conjunto de tuplas, consistente en (
x,xal cuadrado); de 1 a 99. - Una lista con todos los números al cuadrado de 1 a 99.
Q126. La Similaridad de Jaccard es una fórmula que te dice qué tan similares son dos conjuntos. Se define como la cardinalidad de la intersección dividida por la cardinalidad de la unión. ¿Qué opción es una implementación precisa en Python?
-
def jaccard(a, b): return len (a | b) / len (a & b) -
def jaccard(a, b): return len (a & b) / len (a | b) -
def jaccard(a, b): return len (a && b) / len (a || b) -
def jaccard(a, b): return a.intersection(b) / a.union(b)
- Long
- Int
- Float
- Double
[1,2,3] * 3-
[3,2,3] -
[1, 2, 3, 1, 2, 3, 1, 2, 3] - Obtendrás un error de tipo.
-
[3,6,9]
- 1
- 3
- 2
- Se lanza una excepción IndexError.
- Las cadenas pueden estar encerradas por comillas dobles (") o comillas simples (').
- Las cadenas solo pueden estar encerradas en comillas simples (').
- Las cadenas de un solo carácter deben estar encerradas en comillas simples ('), y el resto debe estar encerrado en comillas dobles (").
- Las cadenas solo pueden estar encerradas en comillas dobles (").
-
def __init__(self): pass -
class __init__(self): pass -
class __init__(): pass -
def __init__(): pass
() - parámetro vacío.
self - se refiere a todas las instancias dentro de una clase.
__init__ - un método reservado, también conocido como constructor.
__init__() - siempre se ejecuta cuando se inicia la clase.
Q132. Supongamos que necesitas usar la función sin de la biblioteca math. ¿Cuál es la sintaxis correcta para importar solo esa función?
-
from math import sin -
import sin from math -
import math.sin -
from math.sin import math
-
my_set = {0, 'apple', 3.5} -
my_set = to_set(0, 'apple', 3.5) -
my_set = (0, 'apple', 3.5).to_set() -
my_set = (0, 'apple', 3.5).set()
import numpy as np
a = np.array([1, 2, 3])
print(a[1])-
2 -
[1, 2, 3] -
1 -
[2]
-
fruit_info = to_dict("fruit": "apple", "count": 2, "price": 3.5) -
fruit_info = {"fruit": "apple", "count": 2, "price": 3.5} -
fruit_info = ("fruit": "apple", "count": 2, "price": 3.5).dict() -
fruit_info = ("fruit": "apple", "count": 2, "price": 3.5)
- cadenas; numéricos
- no estructurados; estructurados
- numéricos; tabulares
- tabulares; numéricos
Explicación: La biblioteca Pandas se usa comúnmente para trabajar con datos tabulares, como datos en forma de tablas o hojas de cálculo. Proporciona estructuras de datos y funciones para manipulación y análisis de datos. Por otro lado, NumPy es una biblioteca poderosa para computación numérica en Python, y a menudo se usa para realizar operaciones matemáticas en datos numéricos, como arrays y matrices.
- Usar un compilador C como
gccoclang. - Usar un gestor de paquetes como
pipoconda. - Usar un IDE como Notepad++ o Idle.
- Usar un gestor de paquetes como NPM o NuGet.
Q138. La imagen abajo fue creada usando Matplotlib. Es un gráfico de distribución de una lista de enteros llenos con números usando la función _ y graficado con _.
-
random.uniform(0,50);plt.hist -
random.gauss(50,20);plt.hist -
random();plt.scatter -
random.triangular(0,50);plt.bar
import numpy as np
a = np.arange(100)
b = a[50:60:2]-
a: todos los enteros de 0 a 99 (inclusive);b: todos los enteros pares de 50 a 58 (inclusive). -
a: todos los enteros de 0 a 100 (inclusive);b: todos los enteros pares de 50 a 60 (inclusive). -
a: todos los enteros de 0 a 99 (inclusive);b: todos los enteros pares de 50 a 60 (inclusive). -
a: todos los enteros de 0 a 99 (inclusive);b: todos los enteros impares de 49 a 59 (inclusive).
Q140. Al usar NumPy en Python, ¿cómo verificas la dimensionalidad (número y longitud de dimensiones) de un objeto llamado my_object?
-
my_object.get_shape() -
my_object.shape -
my_object.dim() -
len(my_object)
Q141. Asume que tienes una lista no vacía llamada mylist y quieres buscar un valor específico. El número mínimo de comparaciones será _ y el número máximo de comparaciones será _.
-
len(mylist); len(mylist) -
1; len(mylist) -
2; len(mylist) -
0; len(mylist)
Explicación: Puedes usar una declaración break y el valor que se busca puede ser el primer elemento de la lista, dado que no está vacía.
-
0 -
True -
None -
False
Q143. Supongamos que quieres verificar si dos matrices pueden multiplicarse usando NumPy para propósitos de depuración. ¿Cómo completarías este fragmento de código llenando los espacios en blanco con las variables apropiadas?
import numpy as np
def can_matrices_be_multiplied (matrix1, matrix2):
rowsMat1, columnsMat1 = matrix1.shape
rowsMat2, columnsMat2 = matrix2.shape
if _____ == ______ :
print("Las matrices pueden multiplicarse!")
return True
else:
return False- columnsMat1; rowsMat1;
- columnsMat1; rowsMat2;
- columnsMat1; columnsMat2;
- columnsMat2; rowsMat1;
referencia. Una matriz puede multiplicarse por cualquier otra matriz que tenga el mismo número de filas que la primera tiene columnas. Es decir, una matriz con 2 columnas puede multiplicarse por cualquier matriz con 2 filas
[(x, x+1) for x in range(1,5)]
- [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
- [1,2,3,4,5]
- [(1, 2), (2, 3), (3, 4)]
- [(1, 2), (2, 3), (3, 4), (4, 5)]
Q145. En Python, un método de clase debe tener _ como decorador de función, y el primer parámetro del método será una referencia a _.
- @classmethod; la clase
- inline; la clase
- static; self
- @static; self
- :
class Father():
name = 'Robert'
class Person(Father):
def __init__(self, name):
self.fathername = super.name
self.name = name
def introduce(self):
print(f"My name is {self.name} son of {self.fathername}")
king = Person("Joffrey")
king.introduce()- :
class Father():
name = 'Robert'
class Person(Father):
def __init__(self, name):
self.fathername = self.name
self.name = name
def introduce(self):
print(f"My name is {self.name} son of {self.fathername}")
king = Person("Joffrey")
king.introduce()- :
class Father():
name = 'Robert'
class Person(Father):
def __init__(self, name):
self.name = name
def introduce(self):
print(f"My name is {self.name} son of {super.name}")
king = Person("Joffrey")
king.introduce()- :
class Father():
name = 'Robert'
class Person(Father):
def __init__(self, name):
self.name = name
def introduce(self):
print(f"My name is {self.name} son of {base.name}")
king = Person("Joffrey")
king.introduce()Explicación: En el primero, super no tiene .name (debería ser self.name). El tercero pierde Robert, y base no está definido en el cuarto.
Q147. ¿Qué salida produce este código en la consola, asumiendo que defaultdict ya ha sido importado?
animals = {
'a': ['ant', 'antelope', 'armadillo'],
'b': ['beetle', 'bear', 'bat'],
'c': ['cat', 'cougar', 'camel']
}
animals = defaultdict(list, animals)
print(animals['b'])
print(animals['d'])- A
['beetle', 'bear', 'bat']
[]- B
['beetle', 'bear', 'bat']
# se lanzará una excepción- C
['beetle', 'bear', 'bat']
None- D
['bat', 'bear', 'beetle']
[]Explicación: Los diccionarios usualmente resultan en una excepción cuando se usa la sintaxis de corchetes cuadrados. Defaultdict aquí devuelve un valor por defecto dedicado por el primer parámetro, así que en lugar de lanzar una excepción, devuelven el valor por defecto. Nota que esto necesita importarse como sigue: from collections import defaultdict
Q148. ¿Qué devolverá esta línea de código? (Asume que n ya está definido como cualquier valor entero positivo.)
[x*2 for x in range(1,n)]- Una lista con todos los números pares menores que 2*n.
- Un diccionario con todos los números pares menores que 2*n.
- Una lista con todos los números impares menores que 2*n.
- Una lista con todos los números pares menores o iguales a 2*n.
x = 18
if x > 10:
if x > 15:
print('A')
else:
print('B')
else:
print('C')-
C -
B -
A -
BC
- 32
- 16
- 128
- No se especifica una longitud fija.
referencia No se especifica una longitud fija pero Pep-8 especifica bajo "Longitud Máxima de Línea" "Limitar todas las líneas a un máximo de 79 caracteres".
for i in range(5): pass- 5
- La variable se vuelve no disponible.
- 6
- 4
- Expresiones de cadenas formateadas.
- Cadenas funcionales.
- Cadenas formateadas modulo.
- Literales de cadenas formateadas.
- Uno.
- Todos los CPUs disponibles.
- Dos.
- Tres.
Explicación: El threading de Python está restringido a un solo CPU a la vez. La biblioteca multiprocessing te permitirá ejecutar código en diferentes procesadores.
x = 5
y = 1 + (20 if x < 5 else 30)-
False -
21 -
2 -
31
Explicación: Si tienes solo una declaración para ejecutar, una para if y una para else, puedes ponerlo todo en la misma línea.
x = 5
# Esta es la misma declaración expandida a múltiples líneas
y = 1
if (x < 5):
y += 20
else:
y += 30- Conversión de una jerarquía de objetos Python en flujo de bytes.
- Conversión de una tabla de datos en una lista.
- Conversión de un flujo de bytes en jerarquía de objetos Python.
- Conversión de una lista en una tabla de datos.
referencia
"Pickling" es el proceso por el cual una jerarquía de objetos Python se convierte en un flujo de bytes, y "unpickling" es la operación inversa, por la cual un flujo de bytes (de un archivo binario u objeto tipo bytes) se convierte de vuelta en una jerarquía de objetos.
print("codescracker".endswith("er"))-
True -
1 -
2 -
False
- Verdadero
- Falso
print("programming".center())-
cr -
programming - Error que dice
TypeError: center expected at least 1 argument, got 0. - Ninguna de las anteriores.
referencia. El método center() alineará al centro la cadena, usando un carácter especificado (el espacio es el predeterminado) como carácter de relleno.
Sintaxis: string.center(length, character) donde length es requerido!
- Tim Berners-Lee
- Ada Lovelace
- Guido van Rossum
- Alan Turing
- Set
- Tuple
- Dictionary
- List
x = 1j
print(x**2 == -1)- Un error de tiempo de ejecución diciéndote que la variable
jno ha sido inicializada. -
True -
1j -
False
Explicación: La letra j actúa como la unidad imaginaria en Python, por lo tanto x**2 significa j**2 que es igual a -1. La declaración x**2 == -1 se evalúa como True.
print(0xA + 0xB + 0xC)-
33 -
63 -
0xA + 0xB + 0xC -
None
Explicación: A, B y C son enteros hexadecimales con valores 10, 11 y 12 respectivamente, así que la suma de A, B y C es 33.
for i in range(5):
print(i)
else:
print("Done!")- A
1
2
3
4
5
Done!- B
0
1
2
3
4
5
Done!- C
0
1
2
3
4
Done!- D: Obtendrás un error de sintaxis.
- Usa listas en lugar de tuplas cuando tienes una colección de objetos relacionados pero diferentes.
- Usa tuplas en lugar de listas cuando tienes una colección común de objetos similares.
- Usa tuplas en lugar de listas para funciones que necesitan devolver múltiples valores.
- Usa listas en lugar de tuplas cuando la posición de los elementos es importante.
Q165. Considera el siguiente fragmento de código que usa decoradores para calcular el tiempo de ejecución de la función execution_fn:
import functools
import time
def timer(MISSING_ARG_1):
@functools.wraps(func)
def wrapper(*args, **kwargs):
start_time = time.perf_counter()
rval = func(*args, **kwargs)
end_time = time.perf_counter()
duration = end_time - start_time
print(f"Executed in {duration:.4f} seconds")
return MISSING_ARG_2
return MISSING_ARG_3
@timer
def execution_fn():
for i in range(3):
time.sleep(1)
execution_fn()¿Cuál de las siguientes opciones son los argumentos faltantes?
- :
MISSING_ARG_1 = wrapper
MISSING_ARG_2 = rval
MISSING_ARG_3 = func
- :
MISSING_ARG_1 = func
MISSING_ARG_2 = rval
MISSING_ARG_3 = wrapper
- :
MISSING_ARG_1 está vacío
MISSING_ARG_2 = rval
MISSING_ARG_3 = wrapper
- :
MISSING_ARG_1 está vacío
MISSING_ARG_2 = rval
MISSING_ARG_3 = func
-
class Dog: -
Dog class: -
Dog: -
class Dog
-
preprocessing -
pipeline -
filters -
pipe_filter
referencia La sintaxis correcta es en realidad: from sklearn.pipeline import Pipeline
Q168. Debes pasar un valor de _ para el argumento axis al método apply de Pandas para aplicar la función a cada fila.
- row
- col
- 1
- 0
- ... punteros.
- ... puntos.
- ... marcadores.
- ... ninguna de estas.
a = np.array([[1, 2], [3, 4], [5, 6]])
c = a[(a > 3) & (a < 11)]
print(c)-
[[3, 4], [5, 6]] -
[False, False, False, True, True, True] -
[[0,0], [3, 4], [5, 6]] -
[4 5 6]
Q171. Asume que m, n, y p son enteros positivos. En la siguiente comprensión, ¿cuántas veces se llamará la función randint?
[ [ [ randint(1,100) for i in range(m) ] for j in range(n) ] for k in range(p) ]-
m * n * p - El mayor valor de
(m,n,p). - 1 millón.
-
m + n + p
Q172. Supongamos que tienes una clase llamada MyClass que tiene herencia múltiple y métodos con el mismo nombre en sus ancestros. ¿Qué método de clase podrías llamar para ver qué método tendrá prioridad cuando sea invocado?
-
MyClass.__mro__ -
MyClass.hierarchy() -
callable(MyClass) -
dir(MyClass)
Explicación: MRO significa Method Resolution Order (Orden de Resolución de Métodos). Devuelve una lista de tipos de los cuales la clase se deriva, en el orden en que se buscan los métodos.
Q173. Supongamos que tienes una lista de empleados descrita por el código abajo. Quieres asignar a Alice el mismo salario que Charlie. ¿Qué opción logrará eso?
employees = {
'alice':{
'position':'Lead Developer',
'salary':1000
},
'bob':{
'position': 'Lead Artist',
'salary':2000
},
'charlie':{
'position':'cfo',
'salary':3000
}
}-
employees['alice']['salary'] = employees['charlie']['salary'] -
employees.alice.salary = employees.charlie.salary -
employees['alice'][1] = employees['charlie'][1] -
employees['alice'].salary = employees['charlie'].salary
Explicación: Esto es acceder a una clave en un diccionario anidado dentro de otro diccionario. El comando employees['alice']['salary'] = employees['charlie']['salary'] asigna el valor de la clave salary en el diccionario del empleado charlie al valor de la clave salary en el diccionario del empleado alice.
Q174. Te dan este fragmento de código. Asume que m y n ya están definidos como algún valor entero positivo. Cuando se complete, ¿cuántas tuplas contendrá mi lista?
mylist = []
for i in range(m):
for j in range(n):
mylist.append((i,j))-
m -
m + n -
n -
m * n
Explicación: Este código se ejecutará m x n veces, si ejecutas este código, creará m x n tuplas.
El primer bucle se ejecuta m veces y el bucle interno se ejecutará n veces. La única iteración del primer bucle solo se completará cuando todas las n iteraciones de un bucle interno se hayan completado. Este es el mismo proceso para la 2da, y 3ra, ... m-ésima iteraciones para el bucle externo. En general, ambos bucles se ejecutarán m x n veces.
{x : [y for y in range (1, x) if x % y == 0] for x in range (2, 100)}- Un diccionario cuyas claves son los números del 2 al 99 (inclusive), y sus valores respectivos son sus factores.
- Un diccionario cuyas claves son los números del 2 al 99 (inclusive), y sus valores respectivos son una lista del 1 al valor de la clave misma (inclusive).
- Un diccionario cuyas claves son los números del 2 al 99 (inclusive), y sus valores respectivos son los números pares del 1 al valor de la clave misma (inclusive).
- Un diccionario cuyas claves son los números del 2 al 99 (inclusive), y sus valores respectivos son los números impares del 1 al valor de la clave misma (inclusive).
- tomar una instantánea de todos los paquetes y bibliotecas en tu entorno virtual
- conectar varios sistemas, como conectar un front-end web, un servicio API, una base de datos y una aplicación móvil
- capturar argumentos de línea de comandos dados en tiempo de ejecución de un archivo
- escanear la salud de tu ecosistema Python mientras estás en un entorno virtual
- 17
- 15
- 2
- 16
Q178. Sean las listas 'characters' y 'actors' definidas como se da. ¿Cuál de las siguientes líneas de código da la salida deseada?
characters = ["Iron Man", "Spider Man", "Captain America"]
actors = ["Downey", "Holland", "Evans"]
#Salida deseada : [("Iron Man", "Downey"), ("Spider Man", "Holland"), ("Captain America", "Evans")]- print( zip( characters, actors ) )
- print( { x: y for x in characters for y in actors } )
- print( [ ( x, y ) for x in characters for y in actors ] )
- print( list( zip( characters, actors ) ) )
Explicación: zip() es la función correcta para este caso de uso. Sin embargo, zip() hace un objeto tipo zip que es un iterador. Por lo tanto, usar list() es necesario para convertir el objeto zip en una lista de tuplas que puede mostrarse o accederse directamente. Las otras opciones tienen errores lógicos.
- Siempre, ya que es requerido en cada script Python.
- Solo cuando el script se ejecuta directamente desde la línea de comandos o como el programa principal.
- Solo cuando el script contiene errores de sintaxis.
- Solo cuando el script se importa como módulo en otro script.
El bloque if __name__ == "__main__": se ejecuta cuando el script se ejecuta directamente pero no cuando se importa como módulo en otro script.
referencia
def square(x):
return x * x
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)
result = list(squared_numbers)
print(result)-
[1, 4, 9, 16, 25] -
[1, 2, 3, 4, 5] -
[1, 8, 27, 64, 125] -
[2, 4, 6, 8, 10]
El código define una función square para calcular el cuadrado de un número. Luego usa la función map para aplicar esta función a cada elemento en la lista numbers, resultando en un nuevo iterable. Finalmente, el constructor list se usa para convertir este iterable en una lista. La salida será una lista de números al cuadrado.
referencia
- int
- string
- boolean
- array
- int
- char
- float
- str
- input()
- read_line()
- console_input()
- getline()
print("Hello {name1} and {name2}".format(name1='foo', name2='bin'))
- Hello foo and bin
- Hello {name1} and {name2}
- Error
- Hello and
def outer_func(x):
y = x + 1
def inner_func():
return y + x
return inner_func
x = 10
y = 20
closure_func = outer_func(x)
print(closure_func())- 30
- 21
- 11
- 31
Explicación: Cuando se llama outer_func(10), y se establece en 11 dentro de outer_func. La inner_func, que tiene acceso al ámbito de outer_func, devuelve y + x. Cuando se llama closure_func(), usa y = 11 (de outer_func) y x = 10 del ámbito global, no del argumento de la función. Por lo tanto, closure_func() devuelve 11 + 10 = 21.
x = 5
def func():
x = 10
print(x)
func()
print(x)- 10, 5
- 10, 10
- 5, 5
- 5, 10
Explicación: La respuesta correcta es 10, 5.
En el código dado, la variable x se define primero en el ámbito global con un valor de 5. Dentro de la función func(), se crea una nueva variable local x y se le asigna el valor de 10. Cuando se llama func(), imprime el valor de la x local, que es 10.
Después de la llamada a la función, la declaración print fuera de la función se refiere a la x global, que aún tiene el valor de 5.
Por lo tanto, la salida es 10, 5.
def func(a, b=2, c=3):
print(a, b, c)
func(10)
func(10, 20)
func(10, 20, 30)- 10 2 3, 10 20 3, 10 20 30
- 10 2 3, 10 2 3, 10 2 3
- 10 2 3, 10 20 2, 10 20 30
- 10 2 3, 10 20 3, 10 20 30
Explicación: La respuesta correcta es 10 2 3, 10 20 3, 10 20 30.
En el código dado, la función func() tiene tres parámetros: a, b, y c. b y c tienen valores por defecto de 2 y 3, respectivamente.
Cuando se llama func(10), solo se proporciona el primer parámetro a, así que b y c toman sus valores por defecto de 2 y 3, respectivamente.
Cuando se llama func(10, 20), el primer parámetro a es 10, y el segundo parámetro b es 20. El tercer parámetro c toma su valor por defecto de 3.
Cuando se llama func(10, 20, 30), se proporcionan los tres parámetros, así que a es 10, b es 20, y c es 30.
Por lo tanto, la salida es: 10 2 3 10 20 3 10 20 30
x = [1, 2, 3]
y = x
y.append(4)
print(x)- [1, 2, 3]
- [1, 2, 3, 4]
- [4, 1, 2, 3]
- Error
Explicación: La respuesta correcta es [1, 2, 3, 4].
En Python, asignar y = x no crea una nueva lista; tanto x como y se refieren al mismo objeto en memoria. Así que cuando llamamos y.append(4), modifica la lista original a la que ambas variables apuntan. Por lo tanto, imprimir x mostrará la lista actualizada [1, 2, 3, 4].
def add_item(item, item_list=[]):
item_list.append(item)
return item_list
print(add_item(1))
print(add_item(2))
print(add_item(3, []))- [1] [2] [3]
- [1] [1,2] [3]
- [1,2,3] [1,2,3] [3]
- [1] [2] [3,1,2]
Explicación: La respuesta correcta es [1] [1, 2] [3].
En Python, los argumentos mutables por defecto (como las listas) se evalúan solo una vez cuando se define la función — no cada vez que se llama. Eso significa que las primeras dos llamadas a add_item() comparten la misma lista por defecto, así que acumula valores [1] y luego [1, 2].
Sin embargo, en la tercera llamada add_item(3, []), pasamos una nueva lista vacía, así que crea una lista separada [3].
-
__length__() -
__len__() -
__size__() -
__count__()
def decorator(func):
def wrapper(*args, **kwargs):
print("Before function call")
result = func(*args, **kwargs)
print("After function call")
return result
return wrapper
@decorator
def greet(name):
print(f"Hello, {name}!")
greet("Alice")-
Before function call,Hello, Alice!,After function call -
Hello, Alice! -
Before function call,After function call -
decorator
- Los generadores almacenan todos los valores en memoria a la vez
- Los generadores producen valores bajo demanda usando la palabra clave
yield - Los generadores solo pueden crearse con comprensiones de lista
- Los generadores no pueden iterarse múltiples veces
class Parent:
def method(self):
print("Parent method")
class Child(Parent):
def method(self):
super().method()
print("Child method")
obj = Child()
obj.method()-
Parent method,Child method -
Child method,Parent method -
Child method -
Parent method
-
__str__() -
__repr__() -
__format__() -
__debug__()
from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10))
print(fibonacci.cache_info())-
55y estadísticas de caché -
55yNone -
RecursionError -
TypeError


