【问题标题】:Can I store strings in python array?我可以将字符串存储在python数组中吗?
【发布时间】:2020-03-11 21:38:25
【问题描述】:
from array import *
val=array('u',["thili","gfgfdg"])
print(val)

当我编译上面的python代码时,编译器显示错误。

我的代码有什么问题。不能在 python 数组中存储字符串?

【问题讨论】:

  • 请通读stackoverflow.com/help/how-to-ask以帮助您形成一个可以获得更好答案的问题。
  • 您为什么要这样做?检查the docs - 你可以使用array 来保存字符(基本上是一个字符串),但它不是用来保存字符串的。
  • 不,但是你为什么需要这个?通常,您只需使用list
  • val=array('u', 'thili gfgfdg').tounicode() 告诉我它是否适合您。

标签: python arrays python-3.x string


【解决方案1】:

首先,Python解释器是用C语言编写的,数组库中包含了C语言的数组(其实不是Python的数组,而是C的数组)。字符串是 C 中的字符数组(字符是一个数字,其作用类似于一个字母)。您将两个 unicode 字符串作为参数传递给数组函数,但其​​中一个 unicode 字符串已经是 C 的数组。所以您不能将两个 unicode 字符串传递给数组函数。看那个:

from array import array
my_array = array("u","thili") # no error
print(my_array) # array('u', 'thili')

other_array = array("u",["thili","gfgfdg"])
Traceback (most recent call last):
  File "<pyshell#5>", line 3, in <module>
    my_array = array("u",["thili",""])
TypeError: array item must be unicode character

正如您所见,unicode 字符串数组与普通 unicode 字符串没有太大区别。因为它只包含一个字符串。 您应该改用列表或元组类。 而 Python 中的列表类是 Python 的数组。

my_list = ["thili","gfgfdg"] # same as: my_list = list("thili","gfgfdg")
my_tuple = ("thili","gfgfdg") # same as: my_tuple = tuple("thili","gfgfdg")

不要忘记元组是不可变的,但列表是可变的。如果要更改任何索引的值,请使用列表。 当您想要优化内存 (RAM) 使用时,元组是很好的选择。最后,元组在创建方面比列表更快。

【讨论】:

  • " 并且列表在索引时比元组更快" 不,它们不是。
  • 是的,它们是(至少在我的电脑和 python3.7 中)。您可以使用 timeit 模块进行尝试。列表要快一些(但不慢)。试试看: """ from timeit import timeit \na=list(range(100)) ; b=(range(100)) \ndef f(c): \n\tfor i in c: pass \nprint("List :",timeit(lambda: f(a))) ; print("元组:",timeit(lambda: f(b))) """
  • 比较迭代列表与迭代范围对象,而不是索引,即列表和元组之间的my_sequence[0]
  • 是的,我犯了一个错误。谢谢你。但我正在尝试使用 b=tuple(range(100)) 并且 list 仍然更快。 ???
【解决方案2】:

在python或任何编程语言中使用timeit模块都找不到更快的方法,因为所花费的时间直接取决于您的机器配置,因此为了检查我们在编程中使用时间复杂度的东西...

【讨论】:

  • 我不认为 OP 的问题是关于代码的运行速度。请再次检查问题。这没有回答问题。
  • 这不能回答 op 的问题。
猜你喜欢
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多