在C++中,我可以迭代std::string这样:
std::string str = "Hello World!";
for (int i = 0; i < str.length(); ++i)
{
std::cout << str[i] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
如何在Python中迭代字符串?
我有一个函数接受一个参数,可以是单个项目或双项目:
def iterable(arg)
if #arg is an iterable:
print "yes"
else:
print "no"
Run Code Online (Sandbox Code Playgroud)
以便:
>>> iterable( ("f","f") )
yes
>>> iterable( ["f","f"] )
yes
>>> iterable("ff")
no
问题是字符串在技术上是可迭代的,所以我不能在尝试时捕获ValueError arg[1].我不想使用isinstance(),因为这不是很好的做法(或者我被告知).
我有一个例程,它将一个字符串列表作为参数,但我想支持传入一个字符串并将其转换为一个字符串列表.例如:
def func( files ):
for f in files:
doSomethingWithFile( f )
func( ['file1','file2','file3'] )
func( 'file1' ) # should be treated like ['file1']
Run Code Online (Sandbox Code Playgroud)
我的函数如何判断字符串或列表是否已传入?我知道有一个type功能,但是有更"pythonic"的方式吗?
我想用其他字母替换字符向量中的字母,使用用创建的字典dict,如下
import string
trans1 = str.maketrans("abc","cda")
trans = dict(zip("abc","cda"))
out1 = "abcabc".translate(trans1)
out = "abcabc".translate(trans)
print(out1)
print(out)
Run Code Online (Sandbox Code Playgroud)
所需的输出是 "cdacda"
我得到的是
cdacda
abcabc
Run Code Online (Sandbox Code Playgroud)
现在out1是这个期望的输出,但out不是。我不明白为什么会这样。如何使用通过创建字典dict的translate功能?那么如果我想使用translatewith ,我必须改变trans什么?
缺乏维护动态类型代码的经验,我正在寻找处理这种情况的最佳方法:
(python中的示例,但可以使用任何动态类型的语言)
def some_function(object_that_could_be_a_list):
if isinstance(object_that_could_be_a_list, list):
for element in object_that_could_be_a_list:
some_function(element)
else:
# Do stuff that expects the object to have certain properties
# a list would not have
Run Code Online (Sandbox Code Playgroud)
我对此感到非常不安,因为我认为一种方法应该只做一件事,而我认为它不像它应该的那样可读.所以,我很想做三个函数:第一个是"任何对象"和"排序"在另外两个之间,一个用于列表,另一个用于"简单"对象.然后,这会增加一些复杂性.
什么是最"可持续"的解决方案,以及保证易于维护的解决方案?对于那些我不知道的情况,python中有成语吗?提前致谢.
我有一个简单的代码如下:
for link in links:
products[link] = get_products(link)
Run Code Online (Sandbox Code Playgroud)
我期待links成为一组字符串.但是,有时它只是一个链接,Python似乎将其分解为字符串中的单个字符,这不是我想要的.如何将链接视为一组字符串,即使它是单个字符串?
更新:链接来自:
def read_from_file(name):
with open(name, 'r') as file:
links = file.read()
links_set = links.split('\n')
return links_set
Run Code Online (Sandbox Code Playgroud)
该文件每行包含一个链接.