Codex-Major
Codex-Major

Reputation: 13

Python Wordlist.txt generator

Okay, this is wrong I can feel it, But I cant seem to figure out how to properly iterate through my second list.... (It creates the file in the proper way and iterates but i want to make the script more compact as i want to be able to have num = [0-999] somehow. NOTE I DO realize how large this file is going to get when done.)

filename = "mywordlist.txt"


adj = ["united", "dramatic", "green"]
noun = ["ladder", "axe", "tiger"]
num = ["0", "1", "2"]


File = open(filename, "w")
File.write(adj[0]+noun[0]+num[0])
File.write("\n")
File.write(adj[0]+noun[0]+num[1])
File.write("\n")
File.write(adj[0]+noun[0]+num[2])
File.write("\n")
File.write(adj[0]+noun[1]+num[0])
File.write("\n")
File.write(adj[0]+noun[1]+num[1])
File.write("\n")
File.write(adj[0]+noun[1]+num[2])
File.write("\n")
File.write(adj[0]+noun[2]+num[0])
File.write("\n")
File.write(adj[0]+noun[2]+num[1])
File.write("\n")
File.write(adj[0]+noun[2]+num[2])
File.write("\n")
File.write(adj[1]+noun[0]+num[0])
File.write("\n")
File.write(adj[1]+noun[0]+num[1])
File.write("\n")
File.write(adj[1]+noun[0]+num[2])
File.write("\n")
File.write(adj[1]+noun[1]+num[0])
File.write("\n")
File.write(adj[1]+noun[1]+num[1])
File.write("\n")
File.write(adj[1]+noun[1]+num[2])
File.write("\n")
File.write(adj[1]+noun[2]+num[0])
File.write("\n")
File.write(adj[1]+noun[2]+num[1])
File.write("\n")
File.write(adj[1]+noun[2]+num[2])
File.write("\n")
File.write(adj[2]+noun[0]+num[0])
File.write("\n")
File.write(adj[2]+noun[0]+num[1])
File.write("\n")
File.write(adj[2]+noun[0]+num[2])
File.write("\n")
File.write(adj[2]+noun[1]+num[0])
File.write("\n")
File.write(adj[2]+noun[1]+num[1])
File.write("\n")
File.write(adj[2]+noun[1]+num[2])
File.write("\n")
File.write(adj[2]+noun[2]+num[0])
File.write("\n")
File.write(adj[2]+noun[2]+num[1])
File.write("\n")
File.write(adj[2]+noun[2]+num[2])
File.write("\n")
File.close()

I thought about somehow doing...

adj = ["united", "dramatic", "green"]
noun = ["ladder", "axe", "tiger"]
num =["0", "1", "2"]

 
for x in range(len(adj)): 
    print(adj[x]+noun[0])
    print(adj[x]+noun[1])
    print(adj[x]+noun[2])
    
    print(adj[x]+noun[0]+num[0])
    print(adj[x]+noun[0]+num[1])
    print(adj[x]+noun[0]+num[2])

    print(adj[x]+noun[1]+num[0])
    print(adj[x]+noun[1]+num[1])
    print(adj[x]+noun[1]+num[2])

    print(adj[x]+noun[2]+num[0])
    print(adj[x]+noun[2]+num[1])
    print(adj[x]+noun[2]+num[2])

I know this only prints but same concept no?

Any help is much appreciated.

Upvotes: 1

Views: 356

Answers (3)

Ahmed Mamdouh
Ahmed Mamdouh

Reputation: 706

I made a very simple code. Please run my code and let me know your opinion.

import itertools

filename = "mywordlist.txt"


adj = ["united", "dramatic", "green"]
noun = ["ladder", "axe", "tiger"]
num = [str(i) for i in range(4)] # from '0' to '3'

total_list = [adj, noun, num]

with open(filename, "w") as fp:
    for i in itertools.product(*total_list):
        combined_word = " ".join(i)
        print(combined_word)
        fp.write(combined_word)
        fp.write('\n')

If you want to add a combination of only adj and noun, you can use the following code;

import itertools

filename = "mywordlist.txt"

adj = ["united", "dramatic", "green"]
noun = ["ladder", "axe", "tiger"]
num = [str(i) for i in range(4)] # from '0' to '3'
num.insert(0, "")

total_list = [adj, noun, num]

with open(filename, "w") as fp:
    for i in itertools.product(*total_list):
        combined_word = " ".join(i)
        print(combined_word)
        fp.write(combined_word)
        fp.write('\n')

The result:

enter image description here

Upvotes: 0

Simdan
Simdan

Reputation: 411

Using itertools.product:

adj = ["united", "dramatic", "green"]
noun = ["ladder", "axe", "tiger"]
num = ["0", "1", "2"]

print(list(itertools.product(adj, noun, num)))

Upvotes: 1

Andrej Kesely
Andrej Kesely

Reputation: 195613

To have the script more compact, I suggest to look at itertools.product:

from itertools import product

adj = ["united", "dramatic", "green"]
noun = ["ladder", "axe", "tiger"]
num = [str(i) for i in range(3)] # <-- you can increase the number

with open('file.txt', 'w') as f_out:
    for c in product(adj, noun, num):
        print(''.join(c), file=f_out)

This creates file.txt with content:

unitedladder0
unitedladder1
unitedladder2
unitedaxe0
unitedaxe1
unitedaxe2
unitedtiger0
unitedtiger1
unitedtiger2
dramaticladder0
dramaticladder1
dramaticladder2
dramaticaxe0
dramaticaxe1
dramaticaxe2
dramatictiger0
dramatictiger1
dramatictiger2
greenladder0
greenladder1
greenladder2
greenaxe0
greenaxe1
greenaxe2
greentiger0
greentiger1
greentiger2

Upvotes: 1

Related Questions