使用列表理解创建剥离的嵌套字符串列表

时间:2018-12-02 13:29:09

标签: python python-3.x

我正在对CodeCademy旋转字符串操作进行练习,我尝试使用列表理解来执行任务,但无法正确管理它: 正确的执行方法是有一个嵌套列表,每个列表都包含剥离的字符串。这是我设法正确完成的方法:

transactions_clean = []
for transaction in daily_transactions_split:
  new_trans = []
  for i in range(len(transaction)):
    new_trans.append(transaction[i].strip('\n').strip())
  transactions_clean.append(new_trans)

这将产生结果:

[['Edith Mcbride', '$1.21', 'white', '09/15/17'], ['Herbert Tran', '$7.29', 'white&blue', '09/15/17']]

这正是我想要的。

此方法使用嵌套循环,我对使用列表推导执行它感兴趣。我设法提出:

transactions_clean = [st.strip('\n').strip() for transaction in daily_transactions_split for st in transaction]

可以正确剥离字符串,但是会创建一个非嵌套的字符串列表。 我的目标能否通过理解来实现?

谢谢

2 个答案:

答案 0 :(得分:1)

您没有嵌套列表,因为列表理解中只有一对[](并且那里的表达式本身不会产生列表)。只需这样做(注意,我不得不交换您的for子句的顺序以及插入内部[]):

transactions_clean = [[st.strip('\n').strip() for st in transaction] for transaction in daily_transactions_split]

答案 1 :(得分:0)

模式[(x, y) for x in xs for y in ys]itertools.product(xs, ys)等效。

您正在编写的理解力不需要两个集合的乘积。

import itertools

items = [(x, y) for x, y in itertools.product(range(5), range(10, 15))]
print(len(items), items)

请注意,新集合的长度为5 * 5,即每个集合中项目数的乘积。

输出:

  

25 [(0,10),(0,11),(0,12),(0,13),(0,14),(1,10),(1,11),(1, 12),(1、13),(1、14),(2、10),(2、11),(2、12),(2、13),(2、14),(3、10) ,(3、11),(3、12),(3、13),(3、14),(4、10),(4、11),(4、12),(4、13),( 4,14)]

import random
from string import whitespace

example_data =[
    ['Edith Mcbride', '$1.21', 'white', '09/15/17'],
    ['Herbert Tran', '$7.29', 'white&blue', '09/15/17'],
]

# Make the data dirty again.
transactions_dirty = [[f'{random.choice(whitespace) * random.randint(1, 4)}{item}{random.choice(whitespace) * random.randint(1, 4)}'
                       for item in transaction]
                      for transaction in example_data]
print(transactions_dirty)

# Clean the data.
transactions_clean = [[item.strip() for item in transaction]
                      for transaction in transactions_dirty]
print(transactions_clean)

输出:

  

[['\ x0b \ x0b \ x0b \ x0bEdith Mcbride \ r \ r \ r','\ x0c \ x0c $ 1.21 \ x0b','\ x0bwhite','\ n \ n09 / 15/17 \ t \ t'],['\ t \ t \ tHerbert Tran \ x0c \ x0c \ x0c','\ t \ t $ 7.29 \ n \ n \ n','white&blue \ r','\ n09 / 15/17'] ]

     

[[[伊迪丝·麦克布赖德,'$ 1.21','白','09 / 15/17'],['赫伯特·特兰','$ 7.29','白与蓝','09 / 15/17']]

请注意,.strip('\n').strip().strip()的作用相同