Как превратить список, содержащий строки, в список, содержащий целые числа (Python) - PullRequest
0 голосов
/ 22 апреля 2020

Я оптимизирую PyRay (https://github.com/oscr/PyRay) для использования в качестве Python движка литья лучей, и я работаю над функцией, которая берет текстовый файл и превращает его в список (PyRay использует в качестве карты). Но когда я использую файл как список, он превращает содержимое в строки, поэтому PyRay не может их использовать. Итак, мой вопрос: как мне преобразовать список строк в целые числа? Вот мой код до сих пор. (Я прокомментировал реальный код, чтобы я мог проверить это)

print("What map file to open?")
mapopen = input(">")

mapload = open(mapopen, "r")
worldMap = [line.split(',') for line in mapload.readlines()]
print(worldMap)

Файл карты:

1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,2,0,0,3,0,0,0,0,0,0,0,2,3,2,3,0,0,2,
2,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
2,3,1,0,0,2,0,0,0,2,3,2,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,2,0,0,0,2,
2,0,0,0,0,0,0,0,0,2,0,2,0,0,2,1,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,0,0,2,
2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,2,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
2,0,3,0,0,2,0,0,0,0,0,0,0,2,3,2,1,2,0,1,
1,0,0,0,0,3,0,0,0,0,0,0,0,1,0,0,2,0,0,2,
2,3,1,0,0,2,0,0,2,1,3,2,0,2,0,0,3,0,3,1,
1,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,2,0,0,2,
2,0,0,0,0,0,0,0,0,2,0,0,0,2,3,0,1,2,0,1,
1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,3,0,2,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,1,
2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,

Пожалуйста, помогите мне, я искал все, и я не могу найти что-нибудь.

Ответы [ 3 ]

0 голосов
/ 22 апреля 2020

Посмотрите на встроенную функцию map в python.

L=['1', '2', '3']
map = map(int, L)
for el in map:
    print(el)

>>> 1
... 2
... 3
0 голосов
/ 22 апреля 2020

По вашему вопросу, пожалуйста, найдите ниже способ, которым вы можете изменить список строк на список целых чисел (или целых чисел, если вы используете индекс списка для получения целочисленного значения). Надеюсь, это поможет.

myStrList = ["1","2","\n","3"]

global myNewIntList 

myNewIntList = []

for x in myStrList:
    if(x != "\n"):
        y = int(x)
        myNewIntList.append(y)


print(myNewIntList)
0 голосов
/ 22 апреля 2020

попробуйте это: Вы хотели список списков? или только один большой список?

with open(filename, "r") as txtr:
    data = txtr.read()
data = txtr.split("/n")  # split into list of strings
data = [ list(map(int, x.split(","))) for x in data]

четвертая строка разбивает строку на список, удаляя запятую, затем appliea int () для каждого элемента, а затем превращает его в список. Это делается для каждого элемента данных. Надеюсь, это поможет.

Вот только один большой список.

with open(filename, "r") as txtr:
    data = txtr.readlines()  # remove empty lines in your file!
data = ",".join(data)  # turns it into a large string
data = data.split(",")  # now you have a list of strings
data = list(map(int, data))  # applies int() to each element in data.
...