Reputation: 13
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
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:
Upvotes: 0
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
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