Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple way to "mix" respectively two lists in python?

Tags:

python

file

list

I have the following issue:

I need to "mix" respectively two lists in python...

I have this:

names = open('contactos.txt')
numbers = open('numeros.txt')
names1 = []
numbers1= []
for line in numbers:
    numberdata = line.strip()
    numbers1.append(numberdata)
print numbers1

for line in names:  
    data = line.strip()
    names1.append(data)
print names1

names.close()
numbers.close()

This prints abot 300 numbers first, and the respective 300 names later, what I need to do is to make a new file (txt) that prints the names and the numbers in one line, separated by a comma (,), like this:

Name1,64673635
Name2,63513635
Name3,67867635
Name4,12312635
Name5,78679635
Name6,63457635
Name7,68568635
..... and so on...

I hope you can help me do this, I've tried with "for"s but I'm not sure on how to do it if I'm iterating two lists at once, thank you :)

like image 566
SeñorPythoniano Avatar asked Nov 16 '25 14:11

SeñorPythoniano


2 Answers

Utilize zip:

for num, name in zip(numbers, names):
    print('{0}, {1}'.format(num, name))
like image 156
Yuushi Avatar answered Nov 19 '25 06:11

Yuushi


zip will combine the two lists together, letting you write them to a file:

In [1]: l1 = ['one', 'two', 'three']

In [2]: l2 = [1, 2, 3]

In [3]: zip(l1, l2)
Out[3]: [('one', 1), ('two', 2), ('three', 3)]

However you can save yourself a bit of time. In your code, you are iterating over each file separately, creating a list from each. You could also iterate over both at the same time, creating your list in one sweep:

results = []
with open('contactos.txt') as c:
    with open('numeros.txt') as n:
       for line in c:
          results.append([line.strip(), n.readline().strip()])


print results

This uses a with statement (context manager), that essentially handles the closing of files for you. This will iterate through contactos, reading a line from numeros and appending the pair to the list. You can even cut out the list step and write directly to your third file in the same loop:

with open('output.txt', 'w') as output:
    with open('contactos.txt', 'r') as c:
        with open('numeros.txt', 'r') as n:
            for line in c:
                output.write('{0}, {1}\n'.format(line.strip(), n.readline().strip()))
like image 41
RocketDonkey Avatar answered Nov 19 '25 06:11

RocketDonkey



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!