【问题标题】:How to turn a list containing strings into a list containing integers (Python)如何将包含字符串的列表转换为包含整数的列表(Python)
【发布时间】:2020-08-05 21:05:11
【问题描述】:

我正在优化 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,

请帮帮我,我一直在寻找,但我找不到任何东西。

【问题讨论】:

  • [list(map(int, line.split(','))) for line in mapload.readlines()]

标签: python list type-conversion integer


【解决方案1】:

试试这个:你想要一个列表列表吗?还是只是一个大列表?

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]

第四行通过删除逗号将字符串拆分为列表,然后在每个元素上应用 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.

【讨论】:

  • 在我的文本文件中,它有多行,在列表中,它显示 \n (linebreak) 我如何取出它,我使用 line.strip("\n") 还是类似的东西?
  • 没关系,我想在完成后从列表中删除 \n,否则它只会是一行数字。
  • line.strip("\n") 使 filename.read() 成为列表... list.replace("\n", "") 否则
  • 当我使用 line.strip("\n") 时,它给了我“[]”,我不知道在哪里放 list.replace("\n", "")
  • 您能告诉我一种将文本文件直接读取到整数列表中的方法,还是从列表中删除 /n 但在读取文件时保留它?
【解决方案2】:

根据您的问题,请在下面找到一种方法,您可以将字符串列表更改为整数列表(如果您使用列表索引获取整数值,则为整数)。希望这会有所帮助。

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

global myNewIntList 

myNewIntList = []

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


print(myNewIntList)

【讨论】:

  • 如何从文件中删除 \n(换行符),同时仍保留新行?
  • (另外,在发布大量代码时,请使用其中的三个 ` 例如:print("Hello") print("World")
  • 根据您的原始问题,您想将整数列表提供给 PyRay。上面的解决方案就是这样做的。我错过了什么吗?编辑我的答案以跳过换行符 \n。
  • 请查看 PyRay 的代码,以便您知道我在哪里,并了解我使用的是什么列表,它只有一个脚本!我需要读取一个文本文件,它的内容在我的帖子中,我需要它来替换 PyRay 中的 worldMap 列表,让用户能够更轻松地制作自己的地图,甚至制作自己的游戏!感谢您保持冷静、礼貌的态度!
  • 我在共享的 git 链接中看到了 pyray.py。我想我知道你想要达到的目标。我希望你先回答一个问题。 pyray.py 中的 worldMap 是一个二维 numpy 数组,您共享的地图文件内容是一个整数列表。您确定要用整数列表替换二维数组吗?我建议您仅将世界地图存储在二维数组中的地图文件中,并使用 numpy 进行操作。希望我没有误导你。
【解决方案3】:

查看python中的map内置函数。

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

>>> 1
... 2
... 3

【讨论】:

    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 2023-03-31
    • 2022-10-23
    • 2021-07-23
    • 2022-12-11
    • 2018-12-30
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多