如何编辑列表列表中的字符串?

时间:2016-10-02 17:46:11

标签: python string list indexing replace

我有一个列表,每个列表包含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']]

6 个答案:

答案 0 :(得分: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个字符。

此处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 :(得分: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]

据您所知,该字符串是不可变类型。它无法编辑。每次使用它时,您都会创建一个 new 字符串。

答案 2 :(得分: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](最后一个元素,向后计数)。两者都有效......但最好在整个计划中保持一致。

答案 3 :(得分: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,则需要向map明确添加list()来电:

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

检查Lambda, filter, reduce and map上的博客,了解lambda函数和map()如何在Python中运行。

答案 4 :(得分: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?

答案 5 :(得分:0)

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

对其进行切片