Python - 操纵列表值,就像它是一个字符串
这应该是相当简单的,但迄今让我感到沮丧;我有一个列表值,我分配给一个变量(new_var
),我想反过来切片的价值,就好像它是一个字符串。例如: -Python - 操纵列表值,就像它是一个字符串
new_var = exist_list.pop(0)
假设的new_var
的值现在为foobar
。
我似乎无法使用像new_var[:4]
这样的字符串操作工具;我也尝试使用类似的东西:
new_var2 = "".join(exist_list)
这一定是简单的方法,但它迄今为止躲过我。
最有可能的答案是您的列表中没有字符串,或者您没有列表。
my_list = ['hello world']
string_thing = my_list.pop()
print string_thing[:4]
会工作得很好,假设string_thing具有足够的长度。**
你应该张贴您的错误(与堆栈跟踪除外)。如果您收到索引错误,则列表为空。如果您遇到类型错误,您可能没有字符串。
立即的解决方案可以将列表中出现的任何内容强制转换为字符串。这将工作在几乎所有的东西*(它的对象是如何被打印),但如果你希望的项目可以提供意外的行为,本身是字符串
my_list = [123456789]
string_thing = str(my_list.pop())
print string_thing[:4]
它also isn't particularly pythonic, unless you're doing it for a good reason。如果你期望他们是字符串,你应该弄清楚什么是错的,而不是隐藏错误。
技术答案是你实际上不需要一个字符串。你需要something sliceable。如果我是你(或者如果我是我),我不会走这条路。如果一个通用或自定义对象在这个列表中,它可能是相关的。这也是为什么如果你有类似列表的列表,代码可能不会引发异常,但不会做你想要的东西
你的解决方案没有太大的意义,在上下文中你的问题(尽管感谢你发布尝试)。写作
''.join(my_list)
是您可能在网站上其他地方看到的东西;它肯定不是你想要的,但最简单的方法是注意,如果你没有列表中的字符串,它会引发一个异常......并且如果列表中有字符串,那么你的原始代码会工作。如果可行,但你的原始代码不是,那么唯一的解释是字符串不够长,无法拼接,但是当它们是joined时。
什么可以帮助你超过解决方案下次将包括更直接的信息。例如,包含一个再现问题的简单示例和异常的堆栈跟踪,并且这个文本墙将直接回答:)。例如,你说“字符串操作工具像new_var [:4]”...所以我用“new_var [:4]”作为我的例子。如果你真的意味着一个不同的“字符串操作工具”,然后我可能已经写过的东西无益
脚注
。*任何东西,它不会对STR或再版引发异常。 ..其中应该几乎任何东西
。**其实,即使它不够长,你可能没有问题。
print string_thing[:1000]
不会引发异常,它只是抓住尽可能多的字符就可以了,高达1000排序无用的,你的情况的误导,而不是“错误”
@AnthonyC你可以upvote和接受,如果它帮助你。打印会隐式地将东西转换为字符串,这可能是为什么当您打印它们时显示为“字符串”而不是当您尝试使用它们时 –
哇,这是一个了不起的答案; str()将适合我现在的目的,因为我基本上只需要对一些非生产测试进行破解。 但是给一些上下文;在这种特殊情况下,exist_list实际上是一个AWS VPC对象,使用: boto VPCConnection.get_all_vpcs。 pop(0)能够让我获得new_var的第一个元素,然后可以打印它(例如VPC:vpc-11111111)。我尝试使用new_var [4:]来摆脱第一个4字符,但由于它不是一个字符串(我猜它仍然是一个列表元素),它会抛出错误: TypeError:'VPC'对象没有属性' __getitem__” – AnthonyC
不清楚这段代码应该做的。 'exist_list'究竟是什么,你想在'new_var2'中得到什么? –
适用于我: '>>> [“foobar”]。pop(0)[:4] 'foob'' –
您确定exist_list中有字符串吗? –