juste un avertissement. Mon code est probablement loin. Je suis nouveau et je fais de mon mieux pour le comprendre mais je me bats
Jusqu'à présent, j'ai ceci:
['two'] ['p'] None
c'est le code appelant ma fonction:
[1, 2, 3, 4, 5, 6]]
et:
['one', 'two', 'three', 'four', 'five', 'six'] ['p', 'i', 't'] ['s', 'p', 'i', 't'] ['s', 'p', 'i', 't', 's']
Suis-je loin de ma solution? Je veux vraiment comprendre où je vais mal
La sortie est censée être:
num_list2 = [1, 3, 4, 5, 6] num_list2 = list_function.insert_value(num_list2, 2, 1) print(num_list2)
et:
str_list3 = ['one','three','four', 'five', 'six'] new_list = list_function.insert_value(str_list3, 'two', 1) print(new_list) str_list4 = ['i', 't'] str_list4 = list_function.insert_value(str_list4, 'p', 0) print(str_list4) str_list4 = list_function.insert_value(str_list4, 's', -1) print(str_list4) str_list4 = list_function.insert_value(str_list4, 's', 7) print(str_list4)
ma sortie est:
def insert_value(my_list, value, insert_position): new_list = [] for i in range(len(my_list)): if i == insert_position: new_list.append(value) i += 1 return new_list
c'est tout ce que je reçois
5 Réponses :
Vous êtes en fait extrêmement proche, il vous suffit d'ajouter quelques vérifications de limites:
['one', 'two', 'three', 'four', 'five', 'six'] ['p', 'i', 't'] ['s', 'p', 'i', 't'] ['s', 'p', 'i', 't', 's'] [1, 2, 3, 4, 5, 6]
Production:
def insert_value(my_list, value, insert_position): if insert_position < 0: insert_position = 0 elif insert_position >= len(my_list): insert_position = len(my_list) new_list = [] for i in range(len(my_list)): if i == insert_position: new_list.append(value) new_list.append(my_list[i]) if len(my_list) == insert_position: new_list.append(value) return new_list str_list3 = ['one', 'three', 'four', 'five', 'six'] new_list = insert_value(str_list3, 'two', 1) print(new_list) str_list4 = ['i', 't'] str_list4 = insert_value(str_list4, 'p', 0) print(str_list4) str_list4 = insert_value(str_list4, 's', -1) print(str_list4) str_list4 = insert_value(str_list4, 's', 7) print(str_list4) num_list2 = [1, 3, 4, 5, 6] num_list2 = insert_value(num_list2, 2, 1) print(num_list2)
C'est bien. Merci beaucoup. Je vais passer un peu de temps là-dessus pour comprendre comment cela fonctionne. Merci!!
Vous êtes assez proche sauf que vous avez négligé d'insérer les lignes de la liste d'origine et que vous revenez à l'intérieur de la boucle au lieu de l'avoir fait. De plus, il n'est pas nécessaire d'incrémenter i
. Il est réaffecté à la boucle suivante avec la valeur suivante de la range
. Fondamentalement, la range
remplace l'incrément.
def insert_value(my_list, value, insert_position): new_list = [] for i,v in enumerate(my_list): if i == insert_position: new_list.append(value) new_list.append(v) return new_list str_list3 = ['one','three','four', 'five', 'six'] new_list = insert_value(str_list3, 'two', 1) print(new_list)
Au lieu de range
vous pouvez utiliser enumerate
qui compte mais qui vous donne également les lignes itérées, vous n'avez donc pas à indexer à nouveau le tableau.
def insert_value(my_list, value, insert_position): new_list = [] for i in range(len(my_list)): if i == insert_position: new_list.append(value) new_list.append(my_list[i]) return new_list str_list3 = ['one','three','four', 'five', 'six'] new_list = insert_value(str_list3, 'two', 1) print(new_list)
Je ne pense pas que cette génération de supports de sortie prévue OP lors du passage dans un négatif insert_position
, par exemple -1
ou une position d'insertion qui est plus grand que la longueur du courant my_list
, par exemple, 7
.
Merci pour l'aide. C'était proche et m'a permis de mieux comprendre comment cela fonctionne
Vous avez déjà quelques réponses sur cette question. Voici une autre option à considérer:
['one', 'two', 'three', 'four', 'five', 'six'] ['p', 'i', 't'] ['s', 'p', 'i', 't'] ['s', 'p', 'i', 't', 's'] [1, 2, 3, 4, 5, 6]
Le résultat pour ceux-ci sera:
def insert_value(my_list, value, insert_position): if insert_position < 0: insert_position = (-insert_position) - 1 #if you want any negative value to result in position 0 #then your insert_position assignment will be #if insert_position < 0: insert_position = 0 #the rest of the code will remain the same my_list.insert(insert_position,value) return my_list str_list3 = ['one','three','four', 'five', 'six'] new_list = insert_value(str_list3, 'two', 1) print(new_list) str_list4 = ['i', 't'] str_list4 = insert_value(str_list4, 'p', 0) print(str_list4) str_list4 = insert_value(str_list4, 's', -1) print(str_list4) str_list4 = insert_value(str_list4, 's', 7) print(str_list4) num_list2 = [1, 3, 4, 5, 6] num_list2 = insert_value(num_list2, 2, 1) print(num_list2)
#fonction personnalisée pour l'insertion
['one', 'two', 'three', 'four', 'five', 'six'] ['p', 'i', 't'] ['s', 'p', 'i', 't'] ['s', 'p', 'i', 't', 's'] [1, 2, 3, 4, 5, 6]exemple
str_list3 = ['one','three','four', 'five', 'six'] new_list = insert_value(str_list3, 'two', 1) print(new_list) str_list4 = ['i', 't'] str_list4 = insert_value(str_list4, 'p', 0) print(str_list4) str_list4 = insert_value(str_list4, 's', -1) print(str_list4) str_list4 = insert_value(str_list4, 's', 7) print(str_list4) num_list2 = [1, 3, 4, 5, 6] num_list2 = insert_value(num_list2, 2, 1) print(num_list2)Le résultat pour ceux-ci sera:
insert_value =lambda a,value,idx: a[:idx] + [value] + a[idx:]
Un autre exemple mais la liste des sources changera si besoin vous pouvez la copier
Syntaxe: lst [index: index] = [obj]
Voici sans fonction personnalisée
['one', 'two', 'three', 'four', 'five', 'six'] ['p', 'i', 't'] ['s', 'p', 'i', 't'] ['s', 'p', 'i', 't', 's'] [1, 2, 3, 4, 5, 6]
Le résultat pour ceux-ci sera:
str_list = ['one','three','four', 'five', 'six'] str_list[1:1]=['two'] print(str_list) str_list1=['i', 't'] str_list1[0:0]='p' print(str_list1) str_list1[-1:-1]=['s'] print(str_list1) str_list1[7:7]=['s'] print(str_list1) num_list2 = [1, 3, 4, 5, 6] num_list2[1:1]=[2] print(num_list2)
pouvez-vous partager ce que votre code renvoie qui est inattendu? Cela nous aidera à vous aider.
vient de le mettre à jour
Votre indentation est désactivée sur la
def
et son contenu. Je le réparerais pour vous mais je ne sais pas où vous voulez que lereturn new_list
soit. Dois-je essayer et vous me direz si j'ai bien compris?J'essaie toujours de le comprendre moi-même, mais si vous pouviez peut-être essayer et je peux vérifier. J'apprécierais tellement l'aide
D' accord, tout ce que je faisais était tiret les choses sous les
def
4 places par ligne afin qu'ils qu'ils restent alignés avec la définition.python vous fournit le
list.insert(position, element)
ne pouvez-vous pas utiliser cela au lieu de créer le vôtre?@JoeFerndz Je pense que cette méthode ne gère pas les indices négatifs comme OP le souhaite, par exemple, si la
position
est-1
cette méthode insère l'élément en tant que deuxième à partir de la fin plutôt que comme le premier élément comme OP le souhaite, en fonction de leurs attentes production. Ils auraient donc encore besoin d'ajouter une partie de leur propre logique.@ShashSinha, bon appel. Pour le scénario négatif, je viens de faire
if insert_position < 0: insert_position = (-insert_position) - 1
. Ou si nous voulons que toutes les valeurs négatives aboutissent à la 0ème position, alorsinsert_position = 0
. Avec cela, nous pouvons toujours utilisermy_list.insert(insert_position,value)
pour obtenir la réponse souhaitée.@JoeFerndz Yup qui fonctionnerait.