我正在对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]
可以正确剥离字符串,但是会创建一个非嵌套的字符串列表。 我的目标能否通过理解来实现?
谢谢
答案 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()
的作用相同