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

Python 使用列表理解创建字符串的剥离嵌套列表,python,python-3.x,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

我正在对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]
它可以正确地剥离字符串,但会创建非嵌套字符串列表。 我的目标可以通过理解来实现吗


谢谢

您没有得到嵌套列表,因为您的列表理解中只有一对[],并且您在其中的表达式本身不会生成列表。请注意,我必须交换for子句的顺序,并插入内部[]s:

transactions_clean = [[st.strip('\n').strip() for st in transaction] for transaction in daily_transactions_split]
模式[x,y代表x in xs代表y in ys]与itertools.productxs,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,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,14,4,4,4,4,14]

输出:

[['\x0b\x0b\x0b\x0b\x0bEdith Mcbride\r\r\r'、'\x0c\x0c$1.21\x0b'、'\x0bwhite'、'\n\n09/15/17\t\t']、['\t\t\t\tHerbert-Tran\x0c\x0c'、'\t\t\t$7.29\n\n\n\n\n\n\n'、'\r'、'\n\n09/15/17']

[Edith Mcbride'、'1.21美元'、'white'、'09/15/17']、[Herbert Tran'、'7.29美元'、'white&blue'、'09/15/17']


请注意.strip'\n'。strip的作用与.strip的作用相同。早些时候我试着多买一对[],但没有用,我没有改变for子句的顺序。谢谢你,伙计
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)