Python - 操纵列表值,就像它是一个字符串

问题描述:

这应该是相当简单的,但迄今让我感到沮丧;我有一个列表值,我分配给一个变量(new_var),我想反过来切片的价值,就好像它是一个字符串。例如: -Python - 操纵列表值,就像它是一个字符串

new_var = exist_list.pop(0) 

假设的new_var的值现在为foobar

我似乎无法使用像new_var[:4]这样的字符串操作工具;我也尝试使用类似的东西:

new_var2 = "".join(exist_list) 

这一定是简单的方法,但它迄今为止躲过我。

+1

不清楚这段代码应该做的。 'exist_list'究竟是什么,你想在'new_var2'中得到什么? –

+1

适用于我: '>>> [“foobar”]。pop(0)[:4] 'foob'' –

+0

您确定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排序无用的,你的情况的误导,而不是“错误”

+0

@AnthonyC你可以upvote和接受,如果它帮助你。打印会隐式地将东西转换为字符串,这可能是为什么当您打印它们时显示为“字符串”而不是当您尝试使用它们时 –

+0

哇,这是一个了不起的答案; 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