Csere és csoszogó a semmiből

szavazat
0

Már néztem egy pár szál itt és nem voltam képes megemészteni teljesen, vagy hogy a kódomat munkát. Elég egyszerű, de én már miután sok probléma van ezzel így itt van:

Van egy lista

lst = [a, b, c, d]

És próbálok cserélni két elem utalnak arra elhelyezését a listán, eddig én,

szerkesztés Én nem megengedett felhasználása a csere helyett Python

def swap(i, j, lst):
    placehold_swap = j
    j = i
    i = placehold_swap

Gondolkodtam csinál ilyet annak érdekében, hogy frissítse a sorrendben a lista

    lst = lst

Nyilvánvaló, hogy ez nem működik. Az első gondolata az volt, hogy nem

    return lst

De a feladat én nem használhatja visszatérő vagy nyomtatott, én csak azt tették lehetővé, hogy módosítsa lst

A következő lépés az, hogy hozzon létre egy másik függvény belsejében egy ciklus, ami összekeveri a listán swapping véletlen elemeket a listából 100+ alkalommal

 import random
 def shuffle(lst):

     for i in range (100):
         placehold_shuffle = []
         choose1 = random.randint(0, len(lst)-1)
         choose2 = random.randint(0, len(lst)-1)
         placehold_shuffle = swap(choose1, choose2, lst)

Nem szabad, hogy visszatérő lst vagy bármilyen hozamot úgy hiszem, kell egy list = [valami] valahol belül vagy kívül a hurok, hogy egyszer valami megkeverjük takarít meg, mint a frissített listát, majd megkeveri újra a cikluson belül, de nem vagyok biztos benne, hogyan kell csinálni, és én még nem ütött a játék körül vele, mert nem tudok az első funkció működjön.

Követni*

Kaptam két funkciót működik, mint ez:

def swap(i, j, lst):
   placehold_swap = lst[j]
   lst[j] = lst[i]
   lst[i] = placehold_swap


import random
def shuffle(lst):
   for i in range (100):
      choice1 = random.randint(0, len(lst)-1)
      choice2 = random.randint(0, len(lst)-1)
      swap(choice1, choice2 , lst)
A kérdést 28/02/2017 19:05
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
3

A swapfunkció nem csinál semmit, mert te nem használ lstegyáltalán. Ki kell cserélni a iés jértékeket, amit használ a kikölcsönzéseket lst[i]és lst[j]. Azzal, hogy változtassa meg a shuffle kell dolgozni (bár akkor nem kell placehold_shuffle, mert swapnem tér vissza semmit).

Megjegyezzük, hogy csere értékeket Python is lehet tenni könnyebben, mint a legtöbb más nyelveken köszönhetően tuple és kicsomagolás:

def swap(i, j, lst):
    lst[i], lst[j] = lst[j], lst[i]

Ne aggódj, hogy sok, ha nem érti ezt még. A jelenlegi módszer csere is jól működik is, amíg te tényleg változó elemeit a listán, és nem csak a változók iés j.

Válaszolt 28/02/2017 19:16
a forrás felhasználó

szavazat
0

Megteheti egy helyben végzett swap értékek Python, így nem kell menteni az értéket amit felülírva az első, amikor csere.

def swap(x, y, li):
    li[x], li[y] = li[y], li[x]

A praktikus funkciót a véletlen standard könyvtár választás. Akkor hagyja választott választ egy véletlen index egy lista az összes indexek lehet kialakítani segítségével a tartomány funkció hossza alapján a lista.

from random import choice

def shuffle(li):
    for i in range(100):
        swap(choice(range(len(li))), choice(range(len(li))), li)

Tegyük fel, hogy a lista 4 elem hosszú, akkor tartomány (4) egy olyan szekvencia elemekkel (0, 1, 2, 3). A választás funkció kiválasztja az Ön számára, és akkor közvetlenül adja át a paraméterként a swap függvény, együtt a listát, hogy megbizonyosodjon arról, hogy a hatálya alá.

A Pythonban akkor is lerövidíti a kód tovább azáltal, hogy a hurok belsejében egy listát megértést. De ez nem kötelező, és ebben a helyzetben valószínűleg a választás előnyben.

def shuffle(li):
    [swap(choice(range(len(li))), choice(range(len(li))), li) for i in range(100)]
Válaszolt 28/02/2017 19:33
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more