拆分列表,提取元素并在python中添加它

时间:2018-02-04 14:23:00

标签: python list join split add

我是python的新手。

我有一个带有“::”分隔符的列表,看起来就像那样;

  

1 :: Erin Burkovich(2000):: Drama
  2 ::刺客(1995)::惊悚

我想用“::”拆分它们并从名称中提取年份并将其添加到行尾。每部电影都有自己的索引。

所需列表似乎;

  

1 :: Erin Burkovich:Drama :: 2000
  2名::刺客:惊悚:1995

我的代码如下:

for i in movies:
    movie_id,movie_title,movie_genre=i.split("::")
    movie_year=((movie_title.split(" "))[-1]).replace("(","").replace(")","")
    movies.insert(-1, movie_year)

但它根本不起作用。

任何帮助?

提前致谢。

5 个答案:

答案 0 :(得分:1)

您拥有无限循环,因为当您添加项目时,您的循环需要迭代更多项目,然后您又要添加其他项目......

您应该使用结果创建一个新列表。

此外,您可以更轻松地提取列表:

movie_year = re.findall('\d+', '(2000)')

答案 1 :(得分:0)

您可以使用re.findall获取所有字母数字字符(包括空格),然后重新组合,而不是拆分:

import re
s = ['1::Erin Burkovich (2000)::Drama', '2::Assassins (1995)::Thriller']
new_data = [re.sub('\s(?=\:)', '', "{}::{}:{}:{}".format(id, name, type, year)) for id, name, year, type in [re.findall('[a-zA-Z0-9\s]+', i) for i in s]]

输出:

['1::Erin Burkovich:Drama:2000', '2::Assassins:Thriller:1995']

答案 2 :(得分:0)

另一种(可能不太优雅)的方式:

for i in movies:
    split_list = i.split("::")
    movie_id = split_list[0]
    movie_title = split_list[1].split('(')
    movie_genre = split_list[2]
    print movie_id + '::' + movie_title[0].strip() + "::" + movie_genre + "::" + movie_title[1].strip(')')

答案 3 :(得分:0)

对于python 3.6,请查看

<div class="addthis_inline_share_toolbox"></div>

OUTPUT ::

a="""1::Erin Burkovich (2000)::Drama
2::Assassins (1995)::Thriller"""
a=a.split("\n")
c=[]
for b in range(len(a)):
    g=[]
    d=a[b].split("::")
    e=d[1].split(" (")[1].split(")")[0]
    f=d[1].split(" (")[0]
    g.append(d[0])
    g.append(f)
    g.append(d[2])
    g.append(e)
    h="::".join(g)
    c.append(h)
print("\n".join(c))

答案 4 :(得分:0)

很多问题,

  • split不会返回元组而是列表,因此无法直接分配
  • 电影年份拆分很好,但你不能从原标题中删除年份
  • 插入电影数组不是一个好主意,你需要替换数组元素

我已根据您的需要重写代码,希望有所帮助

movies=["1::Erin Burkovich (2000)::Drama", "2::Assassins (1995)::Thriller"]

for i in range(len(movies)):
    movie_details=movies[i].split("::")
    print movie_details
    movie_id=movie_details[0]
    movie_title=movie_details[1]
    movie_genre=movie_details[2]
    movie_title_parts=movie_title.split(" ")
    movie_year=((movie_title_parts[-1]).replace("(","").replace(")",""))
    del movie_title_parts[-1]
    movie_title=" ".join(movie_title_parts)
    print movie_title+", "+movie_year
    movies[i]=movie_id+"::"+movie_title+"::"+movie_genre+"::"+movie_year