2016-10-02 69 views
-2

我有一个列表,每列有11个字符串。最后一个字符串是一个8位数的代码,我需要保留前三位数字,但删除最后五位数字。如何编辑列表列表中的字符串?

我很确定这可以使用索引和切片完成。使用列表与5个条目而不是11

实施例的示例=

[['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']] 

Desired_Outcome =

[['a','b','c','d','202'],['e','f','g','h','199'],['i','j','k','l', '156']] 
+3

它看起来像你希望我们为你写一些代码。尽管许多用户愿意为遇险的编码人员编写代码,但他们通常只在海报已尝试自行解决问题时才提供帮助。展示这一努力的一个好方法是包含迄今为止编写的代码,示例输入(如果有的话),期望的输出以及实际获得的输出(输出,回溯等)。您提供的细节越多,您可能会收到的答案就越多。检查[FAQ](http://stackoverflow.com/tour)和[如何提问](http://stackoverflow.com/questions/how-to-ask)。 – TigerhawkT3

+0

此外,你说你想“保留前三位数字,但删除最后五位”,但你的例子显示,第一个_four_字符被保留,最后_four_被删除。 – TigerhawkT3

+0

我很感激,但是我写的所有内容看起来像是垃圾,不值得分享。将来会增加,谢谢! – ajbentley

回答

0

您无法编辑字符串;他们是不可变的

但是你可以从每个子列表的最后一个项目切掉不需要的部分(这将创建一个新的字符串):

lst = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']] 
for sublist in lst: 
    sublist[-1] = sublist[-1][:4] 

print(lst) 
# [['a', 'b', 'c', 'd', '2020'], ['e', 'f', 'g', 'h', '1997'], ['i', 'j', 'k', 'l', '1566']] 

一些参考:

  1. Explain Python's slice notation
  2. Aren't Python strings immutable?
2

可以使用nested list comprehension实现这一

>>> l = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']] 
>>> [j[:-1]+[j[-1][:4]] for j in l] 
[['a', 'b', 'c', 'd', '2020'], ['e', 'f', 'g', 'h', '1997'], ['i', 'j', 'k', 'l', '1566']] 

的想法这里是你只抓取最后一个元素的前4个字符。

here j[:-1]首先除了最后一个以外的所有元素。 j[-1]是最后一个元素,j[-1][:4]]将抓取最后一个元素的前4个字符。

有关它们的更多详细信息,请参阅What does "list comprehension" mean? How does it work and how can I use it?Explain Python's slice notation

1

您可以编辑一个地方for循环和切片

>>> l = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']] 
>>> for sublist in l: 
...  sublist[4] = sublist[4][:4] 
... 
>>> l 
[['a', 'b', 'c', 'd', '2020'], ['e', 'f', 'g', 'h', '1997'], ['i', 'j', 'k', 'l', '1566']] 
>>> 

注:在你5元举例来说,最后一个元素可以被索引为sublist[4]sublist[-1](最后一个元素,倒数)。两者都有效......但最好在整个计划中保持一致。

+0

他说列表中有11个字符串,但问题只有5个,但是它是我们需要的最后一个,因为我们不确定索引,我认为使用'sublist [-1]'而不是'sublist [4 ]'是比较好的答案。 –

+0

@ Abhishek - 是的,这可能是解决问题的好方法。在一个定义明确的数据集中,真正的索引和-1都工作得很好,所以我认为我会保留我的示例,并注释您的评论。 – tdelaney

+1

@BhargavRao我仍然忠于这个榜样的人! – tdelaney

2

使用列表理解。

example = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']] 
desired_outcome = [sublist[:-1] + [sublist[-1][:4]] for sublist in example] 

而只是为了你的知识,字符串是不可变的。它不能被编辑。每次你用它做一些事情时,你都会创建一个新的字符串。

0

其实它很简单, (1)通过外部阵列循环。 (2)获取每个子数组的最后一个元素。 (3)使用X切它[: - 5]

1

或者,也可以实现使用map()相同:

>>> example = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']] 
>>> map(lambda x: x[:3]+[x[4][:-4]], example) 
[['a', 'b', 'c', '2020'], ['e', 'f', 'g', '1997'], ['i', 'j', 'k', '1566']] 

上述溶液关于Python 2.7将工作。在你使用Python 3.x的情况下,你需要明确一个list()呼叫map添加为:

list(map(lambda x: x[:3]+[x[4][:-4]], example)) 

检查博客上Lambda, filter, reduce and map知道如何lambda功能和map()作品在Python。

+0

编辑了一下,如果觉得没有必要,请回滚。谢谢 –

+1

@BhargavRao:这很好,实际上我更想具体说什么:) –