假设我有以下列表:
f=[('soybean', 'vegetable_oil'), ('bay', 'smoke'), ('gelatin', 'watermelon')]
我希望加入每个元素,以便获得
['soybean:vegetable_oil', 'bay:smoke', 'gelatin:watermelon']
为此,请执行以下操作:
list=[]
for i in f:
s=':'
list=s.join(f)
print(list)
但是会返回:
TypeError: sequence item 0: expected string, tuple found
我意识到还有一个类似的问题here,但是当我这样做
':'.join(str(d) for d in f)
我得到:
"('soybean', 'vegetable_oil'):('bay', 'smoke'):('gelatin', 'watermelon')"
这不是我想要的,我想知道我在做什么错吗?
答案 0 :(得分:4)
如果使用Python 3.6+,请尝试使用具有列表理解功能的f字符串格式:
[f'{i}:{j}' for i, j in f]
输出
['soybean:vegetable_oil', 'bay:smoke', 'gelatin:watermelon']
答案 1 :(得分:2)
':'.join(str(d) for d in f)
确实对列表元素进行了联接,而不对内部元组进行了联接。
使用以下列表理解:
[':'.join(x) for x in f]
示例:
f = [('soybean', 'vegetable_oil'), ('bay', 'smoke'), ('gelatin', 'watermelon')]
print([':'.join(x) for x in f])
# ['soybean:vegetable_oil', 'bay:smoke', 'gelatin:watermelon']
答案 2 :(得分:2)
list(map(':'.join, f))
# ['soybean:vegetable_oil', 'bay:smoke', 'gelatin:watermelon']
答案 3 :(得分:1)
尝试使用此列表理解:
>>> f=[('soybean', 'vegetable_oil'), ('bay', 'smoke'), ('gelatin', 'watermelon')]
>>> [':'.join(k) for k in f]
['soybean:vegetable_oil', 'bay:smoke', 'gelatin:watermelon']
答案 4 :(得分:1)
在列表上使用for循环时,将遍历列表中的每个元素,在本例中为元组。这意味着您正在遍历列表,而不是内部元组。
说,您有此列表:[(0,0),(2,4),(-3,9)]
在列表上申请循环时,每次都会得到一个元组元素。
为了获得问题中提到的所需结果,可以使用以下代码:
for element in my_list:
my_list.insert(my_list.index(element), ":".join(element))
my_list.remove(element)
希望这对您有所帮助!