我目前的代码:
>>> sent=['attachment', '(1.', '=', '+EDT)', 'Details']
>>> [w[1:] for w in sent if w.startswith(('(', '+'))]+[w for w in sent if not w.startswith(('(', '+'))]
输出:
['1.', 'EDT)', 'attachment', '=', 'Details']
我想这样:
['attachment','1.', '=','EDT)', 'Details']
保持原始秩序。
我不想使用re.replace
,我只想使用w.startswith()
。
答案 0 :(得分:2)
要在保持原始顺序的同时使用startswith()
,您需要在一个列表理解中执行操作。我们可以使用conditional expression:
sent = ['attachment', '(1.', '=', '+EDT)', 'Details']
print([w[1:] if w.startswith(('(', '+')) else w for w in sent])
<强>输出强>
['attachment', '1.', '=', 'EDT)', 'Details']
答案 1 :(得分:1)
您的代码无法正常运行,因为它正在构建2个列表;第一个包含以+
或(
开头的内容,第二个包含不包含>>> sent = ['attachment', '(1.', '=', '+EDT)', 'Details']
>>> [ w[1:] if w.startswith(('(', '+')) else w for w in sent ]
['attachment', '1.', '=', 'EDT)', 'Details']
或>>> import re
>>> sent = ['attachment', '(1.', '=', '+EDT)', 'Details']
>>> [ re.sub(r'^[+(]', '', w) for w in sent ]
['attachment', '1.', '=','EDT)', 'Details']
的内容。然后按顺序将它们连接起来。
您的代码已修复且正确使用条件表达式将会读取
^[+(]
然而,更好,更强大的选择是在这里使用re.sub
+
正则表达式 (
匹配字符串的开头,后跟正好1 ''
或(
;匹配的任何内容都替换为空字符串+
。
另一方面,如果你真的想删除所有前导.lstrip
和>>> sent = ['attachment', '(1.', '=', '+EDT)', 'Details']
>>> [ w.lstrip('+(') for w in sent ]
['attachment', '1.', '=', 'EDT)', 'Details']
字符,无论多少,请使用+(++++((((foo
:
foo
这也会将mChooser=new DbxChooser(APP_KEY_DBX);
替换为appKeys= new AppKeyPair(APP_KEY,APP_SECRET);
AndroidAuthSession session= new AndroidAuthSession(appKeys);
mDBApi= new DropboxAPI<AndroidAuthSession>(session);
mDBApi.getSession().startOAuth2Authentication(MainActivity.this);
,这可能是您想要的,也可能不是。