[英]How to multiply different indices in a row in Pandas DataFrame in Python?
[英]How to multiply string that occur at different indices python
我正在努力编写一个函数,该函数将列表中的第一个字符串复制到6个位置,并将偶数索引处的字符串复制到2个位置,如果它出现在3的倍数的索引上,则重复3次。 但是,如果它同时出现在偶数索引和三倍的索引处,则应将其复制到六个位置。 这是我编写的代码,但是一旦更改输入并针对更多情况我似乎不会动态地解决它,则出现此错误:
IndexError: list index out of range
def multiply_strings(test):
test[0] *= 6
test[2] *= 2
test[3] *= 3
test[4] *= 2
test[6] *= 6
test[8] *= 8
return test
test_list = ["A", "B", "C", "D", "E", "F", "G"]
print(multiply_strings(test_list))
此打印
IndexError: list index out of range
这不是所需的输出。
期待它打印
['AAAAAA', 'B', 'CC', 'DDD', 'EE', 'F', 'GGGGGG']
但预计会处理其他情况,例如
["A", "B", "C", "D", "E", "F", "G", "H", "I"]
这将打印。
['AAAAAA', 'B', 'CC', 'DDD', 'EE', 'F', 'GGGGGG', 'H', 'II']
还有其他一些与我已经发布的类似的极端案例。
只是一些班轮...
>>> a = ["A", "B", "C", "D", "E", "F", "G"]
>>> [(6, 1, 2, 3, 2, 1)[i % 6] * s for i, s in enumerate(a)]
['AAAAAA', 'B', 'CC', 'DDD', 'EE', 'F', 'GGGGGG']
>>> [(1 if i % 2 else 2) * (1 if i % 3 else 3) * s for i, s in enumerate(a)]
['AAAAAA', 'B', 'CC', 'DDD', 'EE', 'F', 'GGGGGG']
>>> [(bool(i % 2) or 2) * (bool(i % 3) or 3) * s for i, s in enumerate(a)]
['AAAAAA', 'B', 'CC', 'DDD', 'EE', 'F', 'GGGGGG']
有点烦人的是第一个是最短的。 我更喜欢其他人。 我发现因子2为(2 - i % 2)
,但是因子3没什么短的...
编辑:另一个简短的:
>>> [(min(i % 6, -i % 6) or 6) * s for i, s in enumerate(a)]
['AAAAAA', 'B', 'CC', 'DDD', 'EE', 'F', 'GGGGGG']
您可以使用enumerate()
函数迭代列表的索引/值对。 然后只需应用您的逻辑就地更新值,例如:
def multiply_strings(strings):
for i, s in enumerate(strings):
k = 1
if i % 2 == 0:
k *= 2
if i % 3 == 0:
k *= 3
strings[i] = s*k
strings = ["A", "B", "C", "D", "E", "F", "G"]
multiply_strings(strings)
print(strings) # ['AAAAAA', 'B', 'CC', 'DDD', 'EE', 'F', 'GGGGGG']
下面的解决方案与上面的发布者非常相似,但是测试了列表开头的长度和循环条件中的细微差别。 无论您要做什么,都可以工作。
def multiply_strings(test):
if len(test) > 0:
test[0] *= 6
for i in range(1, len(test)):
k = 1
if i % 2 == 0:
k *= 2
if i % 3 == 0:
k *= 3
test[i] *= k
return test
>>>test_list = ["A", "B", "C", "D", "E", "F", "G", "H", "I"]
>>>print(multiply_strings(test_list))
['AAAAAA', 'B', 'CC', 'DDD', 'EE', 'F', 'GGGGGG', 'H', 'II']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.