The simplest way to do this is to read the whole file into memory and use Python's convenient list manipulation facilities to create the columns.
with open(fname) as f:
data = f.readlines()
data = [line.split() for line in data]
letters, first, second = zip(*data)
print(letters)
print(first)
print(second)
output
('A', 'B', 'C', 'D')
('12', '51', '20', '89')
('13.9', '55.4', '22.1', '96.8')
In zip(*data) the *data tells the zip function to get its arguments from the iterables in data, so zip(*data) creates a list of tuples from the successive elements of each of the lists in data. (If those iterables are unequal in length then zip stops when the shortest iterable is exhausted).
The core of the above code can be condensed to:
with open(fname) as f:
letters, first, second = zip(*[line.split() for line in f.readlines()])
although you may find the original version more readable.
If for some reason you need lists instead of tuples, replace the zip(*data) with
[list(t) for t in zip(*data)]
However, you should probably use tuples instead of lists here, unless you need to modify them: tuples are immutable but they are slightly more efficient than lists.
If you need to do arithmetic on the values in first and second (and that includes numeric comparisons) you will need to convert them to numeric types, eg
first = [int(s) for s in first]
second = [float(s) for s in second]