Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Listojen vertailu

jester [07.06.2013 13:36:05]

#

Heps,

Vertailen kahta listaa. Mikäli listan ensimmäinen indeksi löytyy toisesta listasta, haluaisin kirjoittaa tälle riville tekstiä. Voisin varmaankin toteuttaa tämän dictionaryn avulla. Voiko joku kertoa miksei tämä koodi printtaa mitään?

list1 = []
list2 = []

b = open("WGS_output.txt", "w")
d = open("CRC_pairs_10ug.txt", "a+")
with open("CRC_WGS.txt") as f:
    luku = f.readlines()
    for lines in luku:
        split = lines.split()
        for i in split:
            new = i + "_1"
            list1.append(new)
            b.write("%s" %new)
            b.write("\n")
    b.close()

for items in d:
    spl = items.split()
    for items in list1:
        if spl[0] in items:
            print items

Chiman [08.06.2013 12:34:34]

#

Voisit nimetä muuttujat paremmin, esim. "luku" ei ole luku vaan tiedoston rivit ja "lines" ei ole monta riviä vaan yksi.

Lopussa käytät samaa items-nimeä kahden sisäkkäisen for-silmukan iteroimiseen, jolloin sisemmässä ei enää pääse käsiksi ulompaan items-nimiseen olioon. Ehkä se on etsimäsi vika.

Muoks: Bugien etsiminen onnistuu helposti, kun tulostat muuttujien sisältöjä ja vertaat tulostusta ajatukseesi siitä, mitä muuttujien pitäisi sisältää.

Esim. jos tiedoston CRC_WGS.txt eka rivi olisi 'a b c', list1:n sisällöksi tulisi ['a_1', 'b_1', 'c_1']. Myöhemmin sitten iteroit tuota listaa ja if-ehtosi on ensimmäisellä suorituskerralla if spl[0] in 'a_1' eli löytyykö CRC_pairs_10ug.txt-tiedoston rivin eka sana merkkijonosta 'a_1'. Sekö on tarkoitus?

jester [10.06.2013 09:48:41]

#

Voisin toki nimetä muuttujat paremmin. Nyt nimeäminen on hieman harhaanjohtava.

Muutin loopin jo aiemmin, jolloin 'items' esiintyy vain kerran, mutta lopputulos ei muuttunut.

Chiman kirjoitti:

Esim. jos tiedoston CRC_WGS.txt eka rivi olisi 'a b c', list1:n sisällöksi tulisi ['a_1', 'b_1', 'c_1']. Myöhemmin sitten iteroit tuota listaa ja if-ehtosi on ensimmäisellä suorituskerralla if spl[0] in 'a_1' eli löytyykö CRC_pairs_10ug.txt-tiedoston rivin eka sana merkkijonosta 'a_1'. Sekö on tarkoitus?

Juurikin näin.

Chiman [10.06.2013 14:28:53]

#

Kyllä tuo minulla toimii kuvatusti. Tässä esimerkkitiedostot:

CRC_pairs_10ug.txt:

_ x y
1 2 3

CRC_WGS.txt

a b c
d e f

Tulostus:

a_1
b_1
c_1
d_1
e_1
f_1
a_1
b_1
c_1
d_1
e_1
f_1

Koodi kirjottaa tiedoston WGS_output.txt:

a_1
b_1
c_1
d_1
e_1
f_1

jester [10.06.2013 15:56:53]

#

Kiitos avusta. Koodi oli lopulta oikein, mutta en huomannut omaa huolimattomuusvirhettäni, ennen kuin aloin sinulle vastausta kirjoittamaan.

Virhe tapahtui kohdassa, jossa loin new-muuttujan. Tämä ei vastannut ainoatakaan CRC_pairs-listan ensimmäistä indeksiä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta